ANTLR中赋值语句的Context-Free-Grammar

时间:2014-04-09 20:38:09

标签: parsing programming-languages antlr grammar context-free-grammar

我正在为无上下文语法编写一个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();

我应该为此添加什么语法规则?我想添加一个函数调用“表达式”规则,但我不确定函数调用是否应该被视为表达式..

由于

1 个答案:

答案 0 :(得分:1)

这个语法对我来说很好看。我假设IDENT和IDENTIFIER是相同的,并且您还有剩余终端的额外制作。

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

|   IDENT '(' actualParameters ')'

你需要生产实际参数,就像这样。

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