while循环的ANTLR语法



嗨,

我需要一个C语法来解析while循环。例如,我需要解析以下代码:

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

我需要解析和评估这些表达式。我遵循了一些步骤并编写了语法,但这并没有给我带来所需的输出。根据上面的代码,在条件检查之后,循环中的函数必须被调用10次。

首先,我将A和B的值存储在哈希表中(ref:ANTLR_hash_table struct),while规则看起来像这样:

whileStatement : 'WHILE' condExpr 'ENDWHILE'
               ;

我可以从哈希表中存储和获取值,但我一直被调用/打印那么多次的函数调用所困扰。我想知道应该遵循哪些步骤才能调用/打印该函数那么多次。

任何关于如何实现这一目标的想法都将大有裨益。

对于while循环,您可以在ANTLR4中使用谓词。

对于您发布的示例,您可以在一段时间内执行以下操作:(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]*
;

此语法仅限于您提供的特定示例,但使用上述语法进行扩展应该不会太困难。

最新更新