1

こんにちは私は再帰を使用しているいくつかの式の文法を作成しています。式ははるかに複雑ですが、今のところ私はその一部だけをテストします。解析メソッドを呼び出した後、allMatchesForメソッドでクラッシュします。スタックトレースはallMatchesFor呼び出しでいっぱいなので、無限ループにあるように見えます。問題はどこにありますか。それは私の文法構築ロジックにあるのでしょうか、それともそうではありませんか?このクラッシュを回避するには、どうすれば同様のことを実行できますか

私の文法は次のようなものです。   

@start = formula;
formula = valueTypeResult;
valueTypeResult = (value | concept | arithmeticStatement);
arithmeticStatement = valueTypeResult (arithmeticOperator valueTypeResult)+;
value = 'V';
concept = 'C';
arithmeticOperator = 'A';

再帰を利用した文法の作り方を教えてください。

ありがとう

4

1 に答える 1

0

ここでParseKitの開発者。

ParseKitは再帰に問題はありませんが、文法が正しくありません。これは、ParseKitの問題というよりもBNFの文法の問題です。

上記の文法であなたが試みていると私が信じているものの正しいバージョンは次のとおりです。

@start = formula;
formula = arithmeticStatement;
arithmeticStatement = valueTypeResult (arithmeticOperator valueTypeResult)+;
valueTypeResult = (value | concept);
value = 'V';
concept = 'C';
arithmeticOperator = 'A';
于 2012-12-14T07:23:37.540 に答える