私は言語の文法(以下のサンプルコード)ANTLRのif-elseブロックを歩くには?
//this is a procedure
procedure main()
$i := 0
begin
if ($i = 0)
$i := 10
loop while ($i != 0)
print($i)
$i := $i - 1
end loop
end if
end procedure
私は表現、印刷メッセージなどを評価することができますが、私は可能な数字
@members {
private Map<String, Integer> variablesTable = new HashMap<String, Integer>();
}
procedure
: ^('procedure' IDENTIFIER assignment_expression* 'begin' statement+)
;
statement
: assignment_expression | selection_statement
;
assignment_expression
: ^(':=' IDENTIFIER e=expression)
{ variablesTable.put($IDENTIFIER.text, e); }
;
expression returns [int result]
: ^('+' op1=expression op2=expression) { result = op1 + op2; }
/* removed similar lines */
| IDENTIFIER { result = variablesTable.get($IDENTIFIER.text); }
| INTEGER { result = Integer.parseInt($INTEGER.text); }
;
equality_expression returns [boolean truth]
: ^('=' op1=expression op2=expression) { truth = op1 == op2; }
| ^('!=' op1=expression op2=expression) { truth = op1 != op2; }
;
selection_statement
: ^('if' e=equality_expression block1=statement+ ('else' block2=statement+)?)
{
if (e) {
//What do I put here?
}
}
;
ないですされたツリー文法を書かれていますプログラムの実行(解釈)をどのように変更するか。
上記のコードと同様に、if-elseの場合、case述語がtrueの場合はif-blockを実行し、elseにスキップするにはどうすればよいですか?
同じループになりますが、ループの最後にループ述語を評価するにはどうすればよいですか?
ありがとうございます!
ありがとう!あなたのブログシリーズは、とても役に立ちました。私はたくさん書き直さなければならなかったが、今はとてもよく見える。私はScopeクラスを使わなかったので、グローバルスコープを実装するのに苦労しました。私はシングルトンクラスでそれを働いた。再度ありがとう:) –
あなたはようこそ@VinayakGarg。 –