在利用 ANTLR 3.3 期间,我正在更改当前语法以支持不带括号的输入。这是我的语法的第一个版本:
grammar PropLogic;
NOT : '!' ;
OR : '+' ;
AND : '.' ;
IMPLIES : '->' ;
SYMBOLS : ('a'..'z') | '~' ;
OP : '(' ;
CP : ')' ;
prog : formula EOF ;
formula : NOT formula
| OP formula( AND formula CP | OR formula CP | IMPLIES formula CP)
| SYMBOLS ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
然后我以这种方式更改它以支持适当的功能:
grammar PropLogic;
NOT : '!' ;
OR : '+' ;
AND : '.' ;
IMPLIES : '->' ;
SYMBOL : ('a'..'z') | '~' ;
OP : '(' ;
CP : ')' ;
EM : '' ;
prog : formula EOF ;
formula : OP formula( AND formula CP | OR formula CP | IMPLIES formula CP)
| ( NOT formula | SYMBOL )( AND formula | OR formula | IMPLIES formula | EM ) ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
但我遇到了以下错误:
error<100>: syntax error: invalid char literal: ''
error<100>: syntax error: invalid char literal: ''
有谁知道我该如何克服这个错误?
Your EM
token:
EM : '' ;
无效:您无法在词法分析器规则中匹配空字符串。
要匹配 epsilon (无),您应该执行以下操作:
rule
: A
| B
| /* epsilon */
;
当然,评论/* epsilon */
可以安全地移除。
请注意,当您按照当前语法执行此操作时,ANTLR 会抱怨可以使用多个替代项来匹配规则。这是因为你的语法不明确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)