Parsing ANTLR中赋值语句的上下文无关语法
我正在为上下文无关语法编写一个ANTLR词法分析器 这就是我现在拥有的:Parsing ANTLR中赋值语句的上下文无关语法,parsing,programming-languages,antlr,grammar,context-free-grammar,Parsing,Programming Languages,Antlr,Grammar,Context Free Grammar,我正在为上下文无关语法编写一个ANTLR词法分析器 这就是我现在拥有的: statement : assignment_statement ; assignment_statement : IDENTIFIER '=' expression ';' ; term : IDENT | '(' expression ')' | INTEGER | STRING_LITERAL | CHAR_
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');
然而,赋值语句也应该考虑右边是函数调用(语句的返回值)的情况。比如说,
items = getItems();
我应该为此添加什么语法规则?我想在“表达式”规则中添加一个函数调用,但我不确定函数调用是否应被视为表达式
谢谢我觉得这语法不错。我假设IDENT和IDENTIFIER是相同的,并且您有其他终端的产品 这个产品似乎定义了一个函数调用
| IDENT '(' actualParameters ')'
您需要一个实际参数的产品,类似这样的东西
actualParameters : nothing | expression ( ',' expression )*
我建议你慢慢地一块一块地执行你的语法,并测试每一条规则。例如,它会为您标识您同时拥有IDENT和IDENTIFIER令牌。@TheantlGuy感谢您的回复。你能详细说明一下IDENT和IDENTIFIER之间的区别吗。。?我为什么要把它们分开?你的意思是要有两种不同形式的标识符吗?标识符和标识符?当然不是。
actualParameters : nothing | expression ( ',' expression )*