Antlr4 c#运行时错误

时间:2018-01-02 12:46:39

标签: antlr4

这是我的语法文件的精简版 -

grammar csv;
csv_list                 : ( TEXT | LETTERS | NUMBER ) (COMMA csv_list)* ;               
any_literal              : TEXT | LETTERS | NUMBER ;

fragment DIGIT           : [0-9] ;
DOT                      : '.' ;
COMMA                    : ',' ;
LETTERS                  : [a-zA-Z]+ ;
NUMBER                   : DIGIT+ ;
TEXT                     : [0-9a-zA-Z]+ ;

WHITESPACE               : ' ' -> skip;

尝试实例化上下文时遇到运行时错误(在我的情况下,上下文类名称为Csv_listContext

请注意,NUMBERLETTERS词法分析器规则与语法的其余部分相关,因此我无法删除它们。

在C#runtime中运行解析器时,我得到一个“参数不能为空”的异常。

任何暗示我指向正确方向的建议都将受到赞赏。

P.S 我知道这不是一个完整的CSV语法,并且有一些CSV语法可以正常工作,这只是我正在研究的语法的精简版本。

UPDATE 测试输入为1,1232,sdfsdf,123,fff,2e,f2

1 个答案:

答案 0 :(得分:0)

对于任何遇到此错误的人,以下是我(有点)修复它的方法:

grammar csv;

csv_list            : any_literal (COMMA any_literal)* 
                    ;

any_literal         : TEXT | LETTERS | NUMBER
                    ;

fragment DIGIT           : [0-9] ;
DOT                      : '.' ;
COMMA                    : ',' ;
LETTERS                  : [a-zA-Z]+ ;
NUMBER                   : DIGIT+ ;
TEXT                     : [0-9a-zA-Z]+ ;
WHITESPACE               : ' ' -> skip;

这可能有效,因为csv_list解析器规则中没有递归。