antlrの「 'z」が$や£のようなワイルドカードを一致させる理由

StackOverflow https://stackoverflow.com/questions/3188574

  •  02-10-2019
  •  | 
  •  

質問

次のグラマーを実行したとき:

test : WORD+;

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

そして、私は入力を与えます「?テスト」ANTLRはなぜこれを有効な入力として受け入れるのですか? ( 'a' .. 'z')は、小文字のアルファベット内の文字のみを一致させると思いましたか?

役に立ちましたか?

解決

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();
    }
}

のコピーをダウンロードします ANTLR 3.2 jar 同じディレクトリで。

ここで、lexer&parserを生成します:

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 

(置き換えます :; あなたが窓にいるなら!)

次のエラーメッセージが生成されます。

line 1:0 no viable alternative at character '?'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top