ANTLR入门笔记
定義
ANTLR, 語言識(shí)別的另一個(gè)工具(ANother Tool for Language Recognition ),(前身是PCCTS)是一種語言工具,它提供了一個(gè)框架,可以通過包含 Java,C++,或 C#動(dòng)作(action)的語法描述來構(gòu)造語言識(shí)別器,編譯器和解析器。
關(guān)鍵概念
- 前端:定義語法規(guī)則,antlr通過g4文件來定義
- lexer:詞法解規(guī)則,就是將一個(gè)句子多個(gè)字符進(jìn)行組裝分成多個(gè)單詞的規(guī)則
- parser:語法解析,對(duì)分詞后的整個(gè)句子進(jìn)行解析,可以對(duì)每個(gè)分詞單元做出自定義的處理,從而來實(shí)現(xiàn)自己的語法解析功能。
g4文件
g4文件是antlr生成詞法解析規(guī)則和語法解析規(guī)則的基礎(chǔ)。該文件是我們自定義的,文件名后綴需要是.g4。
rule
rule是antlr生成詞法語法解析的基礎(chǔ)。包括了lexer與parser,每條規(guī)則都是key:value的形式,以分號(hào)結(jié)尾。lexer首字母大寫,parser小寫。
Tokens
詞法原子單元會(huì)生成一個(gè)tokens文件,文件里為每個(gè)原子單元定義了一個(gè)序號(hào)(記號(hào))
fragment詞法規(guī)則
ANTLR文法中語法規(guī)則是在詞法規(guī)則基礎(chǔ)上建立的。但不一定每個(gè)詞法規(guī)則都會(huì)被語法規(guī)則直接使用。這就象一個(gè)類的公有成員和私有成員,公有成員是對(duì)外公開的會(huì)被外界直接調(diào)用。而私有成員不對(duì)外公開是由公有成員間接調(diào)用的。在詞法規(guī)則中那些不會(huì)被語法規(guī)則直接調(diào)用的詞法規(guī)則可以用一個(gè)fragment關(guān)鍵字來標(biāo)識(shí),fragment標(biāo)識(shí)的規(guī)則只能為其它詞法規(guī)則提供基礎(chǔ)。
//正確用法
a : INT;
INT : DIGIT+;
fragment DIGIT : '0' .. '9';
//錯(cuò)誤用法
a : DIGIT;
INT : DIGIT+;
fragment DIGIT : '0' .. '9';
工作流程
核心標(biāo)記
常見模式
核心詞法規(guī)則總結(jié)
總結(jié)
- 上一篇: 中国中医药产业发展状况分析及未来市场竞争
- 下一篇: js excel转日期 time.get