ANTLRStarter さんが書きました:
1. 文字列 abäcd が以下の文法で認識されない (ANTLRWorks 1.4.2) のはなぜですか (結果は abcd のみです。つまり、ドイツ語の変異母音 ä が欠落していますか?
これを再現できませんでした。ANTLRWorks のインタープリターとデバッガー (1.4.2) の両方が、次の解析ツリーを生成します。

また、小規模な手動テストでも次のことが示されています。
Main.java
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
Vowels1aLexer lexer = new Vowels1aLexer(new ANTLRStringStream("abäcd"));
Vowels1aParser parser = new Vowels1aParser(new CommonTokenStream(lexer));
parser.test();
}
}
母音1a.g
grammar Vowels1a;
test
: ( CharLower {System.out.println("CharLower :: " + $CharLower.text);}
| Vowels {System.out.println("Vowels :: " + $Vowels.text);}
)+
;
CharLower
: 'a'..'z'
;
Vowels
: 'ä' | 'ö' | 'ü' | 'Ä'| 'Ö' | 'Ü'
;
デモを実行するには:
java -cp antlr-3.3.jar org.antlr.Tool Vowels1a.g
javac -cp antlr-3.3.jar *.java
java -cp .:antlr-3.3.jar Main
印刷されます:
CharLower :: a
CharLower :: b
Vowels :: ä
CharLower :: c
CharLower :: d
ANTLRStarter さんが書きました:
2. VowelsUpper と VowelsLower で母音を分割し、規則母音で両方の規則を使用するにはどうすればよいですか?
fragment
2 つのルール (VowelsUpper
およびVowelsLower
) を作成し、これらのVowels
両方を一致させます。fragment
Vowels
: VowelsUpper
| VowelsLower
;
fragment VowelsUpper
: 'Ä'| 'Ö' | 'Ü'
;
fragment VowelsLower
: 'ä' | 'ö' | 'ü'
;
fragment
パーサー ルールでルールを使用することはできず、他のレクサー ルールからのみルールを使用することに注意してください。