ANTLRStarter 写道:
1. 为什么使用以下语法无法识别字符串 abäcd(ANTLRWorks 1.4.2)(结果只有 abcd,这意味着缺少德语变异元音 ä?
我无法重现这一点。ANTLRWorks 的解释器和调试器 (1.4.2) 都生成以下解析树:
一个小的手动测试也显示了这一点:
主.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
规则 (VowelsUpper
和VowelsLower
) 并Vowels
匹配这两个fragment
:
Vowels
: VowelsUpper
| VowelsLower
;
fragment VowelsUpper
: 'Ä'| 'Ö' | 'Ü'
;
fragment VowelsLower
: 'ä' | 'ö' | 'ü'
;
请注意,您不能fragment
在解析器规则中使用规则,只能使用其他词法分析器规则!