您能看到以下正则表达式的任何错误吗?我在Antlr 3.4中定义它,但它接受像$ one,£one这样的参数,尽管它不应该。但是,它不接受o£ne或o $ ne。
ID:('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0' .. '9' | '_')* ;
提前致谢。
答案 0 :(得分:3)
不,ID
与"$one"
或"£one"
不匹配,如您所见:
grammar T;
parse : ID EOF;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
TLexer lexer = new TLexer(new ANTLRStringStream("$one"));
TParser parser = new TParser(new CommonTokenStream(lexer));
parser.parse();
}
}
java -cp antlr-3.4-complete.jar org.antlr.Tool T.g
javac -cp antlr-3.4-complete.jar *.java
java -cp .;antlr-3.4-complete.jar Main
将产生以下错误:
line 1:0 mismatched character '$' expecting set null
请注意,antlr-3.4-complete.jar
和antlr-3.4-complete-no-antlrv2.jar
都会产生相同的错误(或任何其他3.x版本)。
我的猜测是你正在使用ANTLRWorks并且你没有注意到控制台选项卡上的错误信息(它们就在那里!)。