Parsing 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_

我正在为上下文无关语法编写一个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');
然而,赋值语句也应该考虑右边是函数调用(语句的返回值)的情况。比如说,

items = getItems();
我应该为此添加什么语法规则?我想在“表达式”规则中添加一个函数调用,但我不确定函数调用是否应被视为表达式


谢谢

我觉得这语法不错。我假设IDENT和IDENTIFIER是相同的,并且您有其他终端的产品

这个产品似乎定义了一个函数调用

|   IDENT '(' actualParameters ')'
您需要一个实际参数的产品,类似这样的东西

actualParameters : nothing | expression ( ',' expression )*

我建议你慢慢地一块一块地执行你的语法,并测试每一条规则。例如,它会为您标识您同时拥有IDENT和IDENTIFIER令牌。@TheantlGuy感谢您的回复。你能详细说明一下IDENT和IDENTIFIER之间的区别吗。。?我为什么要把它们分开?你的意思是要有两种不同形式的标识符吗?标识符和标识符?当然不是。
actualParameters : nothing | expression ( ',' expression )*