почему 'a' .. 'z' в ANTLR соответствует символам подстановки, таким как $ или £ - PullRequest
2 голосов
/ 06 июля 2010

Когда я запускаю следующую грамматику:

test : WORD+;

WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};

и я даю ввод "? Test", почему antlr принимает это как допустимый ввод?Я думал, что ('a' .. 'z') будет соответствовать только символам в строчном алфавите?

1 Ответ

3 голосов
/ 12 июля 2010

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

Чтобы проверить это самостоятельно (правильно), создайте файл Test.g:

grammar Test;

test : WORD+;

WORD : ('a'..'z')+;

WS   : ' '+ {$channel = HIDDEN;};

и файл Main.java:

import org.antlr.runtime.*;

public class Main {
    public static void main(String[] args) throws Exception {
        ANTLRStringStream in = new ANTLRStringStream("?test");
        TestLexer lexer = new TestLexer(in);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        TestParser parser = new TestParser(tokens);
        parser.test();
    }
}

и загрузите копию JAR ANTLR 3.2 в том же каталоге.

Теперь сгенерируйте лексер и парсер:

java -cp antlr-3.2.jar org.antlr.Tool Test.g 

скомпилировать все исходные файлы Java:

javac -cp antlr-3.2.jar *.java

и запустить основной класс:

java -cp .:antlr-3.2.jar Main 

(замените : на ;, если вы используете Windows!)

, который выдаст следующее сообщение об ошибке:

line 1:0 no viable alternative at character '?'
...