2017-10-23 4 views
0

私はANTLR4で関数を実装しました。 例 - FUNCTION( "A"、 "B")ANTLR4:値/パラメーターとしてブランクを受け入れる

文法第1及び第2のパラメータとを区別することができない入力FUNCTION(,"B")、 について

parse 
    : block EOF 
    ; 

    block 
    : 'FUNCTION' LPAREN (atom)? COMMA (atom)? LPAREN 
    ; 

    atom 
    : NIL       #nilAtom 
    | list       #arrayAtom 
    | type=(INT | DOUBLE)   #numberAtom 
    | ID       #idAtom 
    ; 

    list 
    : BEGL array? ENDL 
    ; 

    array 
    : array_element (COMMA array_element)* # arrayValues 
    ; 


    array_element 
    : 
     atom # array_element_types 
    ; 

    COMMA : ','; 

    BEGL : '['; 
    LPAREN : '('; 

    RPAREN : ')'; 
    ENDL : ']'; 
    NIL : '' | 'null'; 
INT : [0-9]+ ; 

DOUBLE : [0-9]+ '.' [0-9]* | '.' [0-9]+ ; 

COMMENT : '#' ~[\r\n]* -> skip ; 

SPACE : [ \t\r\n] -> skip ; 

OTHER : . ; 

。 最初のパラメータとして「B」を取得します。 ありがとうございます。

+0

がどのように1つのブランクの要素をリストから( '[]')空のリストを認識しませんか( '[]')?それらを異なるケースとして認識する必要がありますか? –

答えて

0

あなたは1つのブランクの要素をリストとして[]を解釈する気にしない場合:

list 
: BEGL array ENDL 
; 

array 
: array_element (COMMA array_element)* # arrayValues 
; 


array_element 
: 
    atom? # array_element_types 
; 
+0

この部分について同意します。 Function:FUNCTION(、 "B")について言うことができます。この場合、最初のものと第2のパラメータを知る必要があります。しかし、1つのパラメータしか与えない – Bond

関連する問題