在利用ANTLR 3.3的优势时,我改变了当前的语法来支持没有括号的输入。下面是我的语法的第一个版本:ANTLR BNF语法符号中的epsilon等价物是什么?
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: ''
有谁知道我该如何克服这个错误?
好吧,我改变了语法,并根据您的预期,它不起作用。我只是试图验证输入来检查,如果它是一个命题逻辑声明或不。 – Amirh 2011-04-02 10:56:39
@Amirh,我说只是简单地应用我刚刚回答的问题就会导致ANTLR产生错误。我刚回答你的问题,为什么你得到了错误:'错误<100>:语法错误:无效的字面量:'''。祝你好运。 – 2011-04-02 14:57:52
感谢您将您的答案带回。那么我怎样才能使它工作?它只是一个命题逻辑语法。 btw基于Ira的语法,我可以访问pars树的元素吗?我只是想将一些字符串转换为另一个等效形式?然后找到位于根上的' - >'并用其他子树递归地执行。这是否可以通过艾拉的语法来实现? – Amirh 2011-04-02 15:53:10