我寫的,看起來像下面這樣的語言解析器:詞法分析器來處理與行號前綴線
L00<<identifier>>
L10<<keyword>>
L250<<identifier>>
<<identifier>>
也就是說,每行可能會或可能不會與形式的行號開始Lxxx..
('L'後跟一個或多個數字),後跟一個標識符或關鍵字。標識符是標準的[a-zA-Z_][a-zA-Z0-9_]*
,並且L
後面的位數不固定。行號和後面的標識符/關鍵字之間的空格是可選的(大多數情況下不存在)。
我現在的詞法分析器的樣子:
// Parser rules
commands : command*;
command : LINE_NUM? keyword NEWLINE
| LINE_NUM? IDENTIFIER NEWLINE;
keyword : KEYWORD_A | KEYWORD_B | ... ;
// Lexer rules
fragment INT : [0-9]+;
LINE_NUM : 'L' INT;
KEYWORD_A : 'someKeyword';
KEYWORD_B : 'reservedWord';
...
IDENTIFIER : [a-zA-Z_][a-zA-Z0-9_]*
但是這導致了LINE_NUM
令牌被符號化的IDENTIFIER
S開頭的所有行。
有沒有辦法使用ANTLR語法正確標記這個輸入?
'LINE_NUM'和'IDENTIFIER'之間是否有空格(或空格)? –
@BartL'LINE_NUM'和'IDENTIFIER'之間的空白是可選的。我編輯了這個問題來澄清。 –
您的示例意味着(如果它有效)標識符可以選擇以「LINE_NUM」開頭。語法表示這是強制性的。是對的嗎? – Onur