java – 如何在ANTLR中管理可选空格?
发布时间:2020-12-14 05:57:23 所属栏目:Java 来源:网络整理
导读:我试图解析ANTLR中的数据文件 – 它具有可选的空格 3 6 97 12 15 18 以下显示了行的开始和结束位置.最后有一个换行符,没有标签. ^ 3 6$^ 97 12$^ 15 18$^ 我的语法是: lines : line+;line : ws1 {System.out.println("WSOPT :"+$ws1.text+":");} num1 {Syst
我试图解析ANTLR中的数据文件 – 它具有可选的空格
3 6 97 12 15 18 以下显示了行的开始和结束位置.最后有一个换行符,没有标签. ^ 3 6$ ^ 97 12$ ^ 15 18$ ^ 我的语法是: lines : line+; line : ws1 {System.out.println("WSOPT :"+$ws1.text+":");} num1 {System.out.println("NUM1 "+$num1.text);} ws2 {System.out.println("WS :"+$ws2.text+":");} num2 {System.out.println("NUM2 "+$num2.text);} NEWLINE ; num1 : INT ; num2 : INT ; ws1 : WSOPT; ws2 : WS; INT : '0'..'9'+; NEWLINE : 'r'? 'n'; //WS : (' '|'t' )+ ; WS : (' ')+ ; WSOPT : (' ')* ; 这使 line 1:0 mismatched input ' ' expecting WSOPT WSOPT :null: NUM1 3 WS : : NUM2 6 line 2:0 mismatched input ' ' expecting WSOPT WSOPT :null: NUM1 97 WS : : NUM2 12 BUILD SUCCESSFUL (total time: 1 second) (即领先的WS尚未被识别,最后一行已被遗漏). 我想解析没有空格的行,例如: ^12 34$ ^ 23 97$ 但我得到的错误如下: line 1:0 required (...)+ loop did not match anything at input ' ' 我很欣赏在ANTLR中解析WS的一般解释. 编辑@jitter有一个有用的答案 – {ignore = WS}没有出现在我正在使用的“权威ANTLR参考”书中,因此它显然是一个棘手的领域. 还需要帮助 lines : line line line; line options { ignore=WS; } : ws1 {System.out.println("WSOPT :"+$ws1.text+":");} num1 {System.out.println("NUM1 "+$num1.text);} ws2 {System.out.println("WS :"+$ws2.text+":");} num2 {System.out.println("NUM2 "+$num2.text);} NEWLINE ; 但得到错误: illegal option ignore 编辑显然这已从V3中删除: 解决方法WS : (' ' | 't')+ {$channel = HIDDEN;} ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |