一、 Antlr 的主要类: Antlr 中有主要类有两种(其实还有一种 TreeLexer ) Lexer: 文法分析器类
主要用于把读入的字节流根据规则分段
既把长面条根据你要的尺寸切成一段一段:)并不对其作任何修改
Parser: 解析器类
主要用于处理经过 Lexer 处理后的各段
一些具体的操作都在这里
二、 Antlr 文法文件形式: Antlr 文件是 *
g 形式,即以 g 为后缀名
g class P extends Parser; startRule : n:NAME {System
println("Hi there, "+n
getText());} ; class L extends Lexer; // one-or-more letters followed by a newline NAME: ( 'a'„„'z'|'A'„„'Z' )+ NEWLINE ; NEWLINE : '\r' '\n' // DOS | '\n' // UNIX ; 具体成分分析: 1 、总体结构 Class P extends Parser Class L extends Lexer 两行同 JAVA 继承一样, P 继承 Parser 类; L 继承 Lexer 类
g 文件只能各有一个
2 、 Lexer 类分析 一般按照 类型名:匹配的具体规则; 的形式构成
是分隔字节流的依据
同时可以看到里面可以互相引用
如本例中的类型名 NEWLINE 出现在 NEW 的匹配规则中
3 、 Parser 类分析 一般按照 起始规则名: 规则实例名:类型名或规则名 {Java 语句„„; } ;