0

你好呀,

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

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

我需要解析和评估表达式。我已经按照一些步骤编写了一个语法,但这并没有产生我想要的输出。根据上面的代码,循环内的函数必须在条件检查后调用 10 次。

首先,我将 A 和 B 的值存储在哈希表中(参考: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 回答