簡體   English   中英

ANTLR中賦值語句的上下文無關語法

[英]Context-Free-Grammar for assignment statements in ANTLR

我正在為上下文無關的語法編寫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();

我應該為此添加什么語法規則? 我曾考慮過將函數調用添加到“表達式”規則中,但是我不確定是否應該將函數調用視為表達式。

謝謝

這種語法對我來說很好。 我假設IDENT和IDENTIFIER相同,並且其余終端還有其他產品。

這個生產似乎定義了一個函數調用。

|   IDENT '(' actualParameters ')'

您需要一個生產實際參數的東西,像這樣。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM