Python を使用して ANTLR で小さな文法を作成しました (番号のリストまたは ID のリストのいずれかを受け入れることができる文法) December 12 1965
。次のコードで(そして、私が使用しているすべてのpythonコードは@mainを介して埋め込まれています):
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';
私は何か間違ったことをしていますか?
編集: 入力と同じ文法で ANTLRWorks を使用すると、NoViableAltException がスローされます。コードを介してそのエラーを取得するにはどうすればよいですか?