四种抽象的计算机语言模式:
1)序列:一列元素,数组
2)选择:在多个可选方案中做出选择
3)词法符号依赖:例如左右括号匹配
4)嵌套结构:一种自相似的语言结构。
BNF巴克斯范式,用一些符号标记子规则出现的次数:
- 可选(?),
- 出现0次或多次(*),
- 至少一次(+)。
多个整数的语法规则:
INT+
序列模式
一个CSV文件的规则:
file : (row '\n' )* ; // 多行序列
row : field (',' field)* ; // 逗号分隔的序列
field : INT ; //假设字段都是整数
选择模式
现在允许字段中出现整数或者字符串:
field : INT | STRING ;
词法符号依赖模式
方括号匹配,支持这些数组定义:[1], [1 2], [1 2 3]……
vector : '[' INT+ ']' ;
JSON里的花括号匹配,例如:{“name”:“slb”, “pass”:“password”}
object
: '{' pair (',' pair)* '}'
| '{' '}' //空对象
;
pair : STRING ':' value ;
嵌套模式
stat : 'while' '(' expr ')' stat //匹配while语句
| '{' stat* '}' //花括号包围的语句块
... //其它语句
;
ANTLR里的核心标记: