【发布时间】:2012-04-09 20:15:42
【问题描述】:
我正在尝试从 ANTLR 语法解析和生成 AST。当我尝试解析结构内部的数组和结构数组时,我发现了一些问题。
这是一个声明示例:
TYPE MY_ARRAY :
ARRAY [ 0..2 ] OF INT;
END_TYPE
TYPE est :
STRUCT
c1 : INT;
c : MY_ARRAY;
END_STRUCT;
END_TYPE
TYPE MSA :
ARRAY [ 0..2 ] OF est;
END_TYPE
VAR
MA : MY_ARRAY;
STR : est;
STR2 : MSA;
END_VAR
我对声明没有任何问题。我无法编写语法来解析表达式,如下所示:
STR.c[1]
STR2[2].c[1]
下一个代码显示了我的 ANTLR 语法的摘录:
operand
: variable_simbolic
| DIRECT_VAR<Localization>
| CTE_INT<ConstantINT>
| CTE_BOOL<ConstantBOOL>
| CTE_REAL<ConstantREAL>
;
variable_simbolic
: (ID -> ID<Identificador>) ( (('[' operand (',' operand)* ']') -> ^(ARRAY_ACCESS<ArrayAccess> ID<Identificador> operand+))
| (('.' operand ) -> ^(FIELD_ACCESS<FieldAccess> ID<Identificador> operand))
| (('#' operand ) -> ^(ENUM_ACCESS<EnumAccess> ID<Identificador> operand))
)?
;
此语法允许我解析 STR.c1 或 MA[1] 之类的表达式,但它不解析 STR.c[1] 之类的表达式。如果定义了数组访问,则它必须是父表达式。我希望下一张图有所帮助:
有什么方法可以修改我的语法以接受那种表达方式吗?提前谢谢你。
【问题讨论】:
标签: antlr interpreter abstract-syntax-tree