필자는 파이썬 (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를 통해 박혀되어 사용하고 파이썬 코드의 모든)와 나 오류하지?
EDIT : 동일한 문법 입력으로 ANTLRWorks를 사용할 때 NoViableAltException이 발생합니다. 코드를 통해 오류를 어떻게 얻을 수 있습니까?