这是我的语法文件的精简版 -
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
。
请注意,NUMBER
和LETTERS
词法分析器规则与语法的其余部分相关,因此我无法删除它们。
在C#runtime中运行解析器时,我得到一个“参数不能为空”的异常。
任何暗示我指向正确方向的建议都将受到赞赏。
P.S 我知道这不是一个完整的CSV语法,并且有一些CSV语法可以正常工作,这只是我正在研究的语法的精简版本。
UPDATE 测试输入为1,1232,sdfsdf,123,fff,2e,f2
答案 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
解析器规则中没有递归。