設計原則
語法規則的設計遵循“自頂向下”的原則,即由宏觀到具體。比如,CSV的語法規則,一個CSV文件由多行組成,每行由多個字段組成,每個字段組成規則等等,如下所示,這種方式更貼近人類的思維和表達方式。
csvFile: hdr row+ ;
hdr : row ;
row : field (',' field)* '\r'? '\n' ;
field
: TEXT
| STRING
|
;
TEXT : ~[,\n\r"]+ ;
STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote
規則元素
- Token序列;
- 字符串;//‘literal’ 單引號
- 規則;
- 規則參數;//向規則函數中傳遞的參數,參數的書寫規則是目標語言,用逗號分隔
- 通配符;
- {action} 動作,在元素的間隔中執行;
- {p} 謂詞;
通配符
- | 表示或
- * 表示出現0次或以上
- ? 表示出現0次或1次
- + 表示出現1次或以上
- ~ 表示取反
規則文件與解析器的對應關係
規則文件中的每條規則對應解析器的一個方法和對應的上下文,如下圖所示:
可選標籤
- 含義:爲規則中的某個分支打標;
- 作用:更精準的控制解析過程,分支粒度;如果不用標籤,則只能到規則粒度;
參考: