我正在为无上下文语法编写一个ANTLR词法分析器/解析器。
这就是我现在所拥有的:
statement
: assignment_statement
;
assignment_statement
: IDENTIFIER '=' expression ';'
;
term
: IDENT
| '(' expression ')'
| INTEGER
| STRING_LITERAL
| CHAR_LITERAL
| IDENT '(' actualParameters ')'
;
negation
: 'not'* term
;
unary
: ('+' | '-')* negation
;
mult
: unary (('*' | '/' | 'mod') unary)*
;
add
: mult (('+' | '-') mult)*
;
relation
: add (('=' | '/=' | '<' | '<=' | '>=' | '>') add)*
;
expression
: relation (('and' | 'or') relation)*
;
IDENTIFIER : LETTER (LETTER | DIGIT)*;
fragment DIGIT : '0'..'9';
fragment LETTER : ('a'..'z' | 'A'..'Z');
所以我的作业陈述由表格
标识IDENTIFIER = expression;
但是,赋值语句还应考虑右侧是函数调用的情况(语句的返回值)。例如,
items = getItems();
我应该为此添加什么语法规则?我想添加一个函数调用“表达式”规则,但我不确定函数调用是否应该被视为表达式..
由于
答案 0 :(得分:1)
这个语法对我来说很好看。我假设IDENT和IDENTIFIER是相同的,并且您还有剩余终端的额外制作。
这个产品似乎定义了一个函数调用。
| IDENT '(' actualParameters ')'
你需要生产实际参数,就像这样。
actualParameters : nothing | expression ( ',' expression )*