我使用python(一種可以接受ID列表中的數字列表的語法)在ANTLR中創建了一個小文法,但是當我輸入字符串(如December 12 1965
)時,ANTLR將在該文件上運行並顯示爲什麼我的antlr語法似乎正確地解析了這個輸入?
grammar ParserLang;
options {
language=Python;
}
@header {
import sys
import antlr3
from ParserLangLexer import ParserLangLexer
}
@main {
def main(argv, otherArg=None):
char_stream = antlr3.ANTLRInputStream(open(sys.argv[1],'r'))
lexer = ParserLangLexer(char_stream)
tokens = CommonTokenStream(lexer)
parser = ParserLangParser(tokens);
rule = parser.entry_rule()
}
program : idList EOF
| integerList EOF
;
idList : ID whitespace idList
| ID
;
integerList : INTEGER whitespace integerList
| INTEGER
;
whitespace : (WHITESPACE | COMMENT) +;
ID : LETTER (DIGIT | LETTER)*;
INTEGER : (NONZERO_DIGIT DIGIT*) | ZERO ;
WHITESPACE : ('\t' | ' ' | '\r' | '\n'| '\u000C')+ { $channel = HIDDEN; } ;
COMMENT : ('/*' .* '*/') | ('//' .* '\n') { $channel = HIDDEN; } ;
fragment ZERO : '0' ;
fragment DIGIT : '0' .. '9';
fragment NONZERO_DIGIT : '1' .. '9';
fragment LETTER : 'a' .. 'z' | 'A' .. 'Z';
上午我做錯了什麼:我用下面的代碼(和所有我使用通過@main被嵌入的Python代碼的)沒有錯誤?
編輯:當我使用相同語法的輸入ANTLRWorks,引發NoViableAltException。如何通過代碼獲取該錯誤?