0

やあ、

while ループを解析するための C 文法が必要です。たとえば、次のコードを解析する必要があるとします。

A = 20
B = 1
WHILE(A < 30 )
//function call
A = A + B
ENDWHILE

式を解析して評価する必要があります。いくつかの手順に従って文法を書きましたが、目的の出力が得られません。上記のコードによると、条件チェック後にループ内の関数を 10 回呼び出す必要があります。

まず、A と B の値をハッシュ テーブル (ref : ANTLR_HASH_TABLE 構造体) に格納しています。while ルールは次のようになります。

whileStatement : 'WHILE' condExpr 'ENDWHILE'
               ;

ハッシュテーブルから値を保存して取得することはできますが、何度も呼び出されたり出力されたりする関数呼び出しに行き詰まっています。その回数関数を呼び出し/印刷するためにどの手順を実行する必要があるかを知りたいです。

これをどのように達成する必要があるかについてのアイデアは、非常に役立ちます。

4

1 に答える 1

-1

while ループの場合、ANTLR4 で述語を使用できます。

投稿した例では、次のような while ループを実行できます:(JAVA ターゲット言語)。

grammar SO;

sampleRule
locals [int A, int B]
:
IDENTIFIER1 '=' INTEGER {$A = Integer.parseInt($INTEGER.text);}
IDENTIFIER2 '=' INTEGER {$B = Integer.parseInt($INTEGER.text);}
(
{$A < 30;}? 
IDENTIFIER1 '=' IDENTIFIER1 '+' IDENTIFIER2
{$A = $A + $B;}
)*
;

IDENTIFIER1
: 'A'
;

IDENTIFIER2
: 'B'
;

INTEGER
: [0-9]*
;

この文法は、提供された特定の例に限定されていますが、上記の文法を使用して拡張するのはそれほど難しくありません。

于 2013-07-10T18:01:16.770 に答える