ANTLR reg。表达错误

时间:2011-10-05 21:34:08

标签: compiler-construction antlr antlr3

您能看到以下正则表达式的任何错误吗?我在Antlr 3.4中定义它,但它接受像$ one,£one这样的参数,尽管它不应该。但是,它不接受o£ne或o $ ne。

ID:('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0' .. '9' | '_')*   ;

提前致谢。

1 个答案:

答案 0 :(得分:3)

不,ID"$one""£one"不匹配,如您所见:

T.G

grammar T;

parse : ID EOF;
ID    : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;

Main.java

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.jarantlr-3.4-complete-no-antlrv2.jar都会产生相同的错误(或任何其他3.x版本)。

我的猜测是你正在使用ANTLRWorks并且你没有注意到控制台选项卡上的错误信息(它们就在那里!)。