1
我想創建一個使用ANTLR4定義布爾文本的語法。它可以採用「BOOL#TRUE」或「TRUE」的形式。如何使用ANTLR4中的可選部分創建詞法規則
,如果我把它定義爲一個詞法規則是這樣的:
Bool_Literal : ('BOOL' '#')? ('FALSE' | 'TRUE');
ANTLR的無法比擬的輸入:
isHigh := FALSE;
錯誤是 「不匹配輸入 '假' 預期Bool_Literal」。
但是,如果我將其更改爲一個語法規則:
bool_literal : ('BOOL' '#')? ('FALSE' | 'TRUE');
它可以正確地拿起無論是「BOOL#FALSE」或只是「假」。
似乎詞法規則無法檢測到以可選部分開始的令牌,任何人都知道爲什麼?
謝謝!
韋恩
這裏是我的語法:
grammar TT;
pou
: assignment +
;
assignment : Identifier ':=' expression ';' ;
expression : primary_expr ;
primary_expr : Bool_Literal;
//bool_literal : ('BOOL' '#')? ('FALSE' | 'TRUE');
// lexical
fragment Letter : [a-zA-Z]|'_' ;
fragment Digit : [0-9];
fragment Bit : [0-1];
fragment Octal_Digit : [0-7];
fragment Hex_Digit : [0-9a-fA-F];
Identifier : Letter (Letter|Digit)*;
Bool_Literal : ('BOOL' '#')? ('FALSE' | 'TRUE');
WS : [ \n\r\t]+ -> channel(HIDDEN) ;
Comment : '//' .*? '\n' -> channel(HIDDEN); // channel COMMENTS) //
EOL : '\n';
我的測試輸入:
isLow := BOOL#TRUE;
isLow2 := BOOL#FALSE;
isHigh := FALSE;
它在我向上移動Bool_Literal規則後生效。謝謝! – Wayne