你好,
我需要一个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'
;
我能够从哈希表中存储和获取值,但我仍然坚持要多次调用/打印的函数调用。我想知道在多次调用/打印函数时应该遵循哪些步骤。
关于如何实现这一点的任何想法都会有很大帮助。
答案 0 :(得分:-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]*
;
此语法仅限于您提供的特定示例,但使用上述语法不应过于难以扩展。