我正在尝试从 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
or之类的表达式MA[1]
,但它不解析像STR.c[1]
. 如果定义了数组访问,则它必须是父表达式。我希望下一张图有帮助:
有什么办法可以修改我的语法以接受那种表达方式吗?先感谢您。