ANTLR рег. ошибка выражения - PullRequest
1 голос
/ 06 октября 2011

Можете ли вы увидеть ошибку со следующим регулярным выражением?Я определяю его в Antlr 3.4, но он принимает аргументы типа $ one, £ one, хотя это не должно быть.Однако он не принимает ни одно, ни другое.

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

Заранее спасибо.

1 Ответ

3 голосов
/ 06 октября 2011

Нет, 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.jar, и antlr-3.4-complete-no-antlrv2.jar выдают одну и ту же ошибку (или любую другую версию 3.x, в этом отношении).

Я предполагаю, что вы используете ANTLRWorks, и вы не заметили сообщения об ошибках на вкладке консоли (они есть!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...