简单的结构化文本
为了简单起见,我们定义一种特别的格式,该格式包含三种成分,分别为Name,Age,Height。并按照如下所示的格式组织起来:
Name{小明}Age{18}Height{175}
Name{小强强}Age{23}Height{173}
...
我们需要识别出这些数据,并做出特殊的响应。
定义解析规则
这是一种非常简单的文本数据,其规则定义也非常简单。新建一个规则文件,命名为TestL.g4。
并将以下内容复制进去。
grammar TestL;
doc: item+;
item: NAME '{' STRING '}' AGE '{' NUM '}' HEIGHT '{' NUM '}';
NAME: 'Name';
AGE: 'Age';
HEIGHT: 'Height';
STRING: ~[ \t\r\n{}0-9]+;
NUM: [1-9][0-9]*;
SPACE: [ \t\r\n]->skip;
第一行表示语法的名字,必须与文件名相同。因为文件名是TestL.g4,所以这里必须是TestL。
词法分析的规则必须大写,语法分析的规则必须小写。词法规则类似于正则表达式的书写,但并不完全相同。其中的**->skip**表示词法分析器识别出前面规则代表的东西时会自动跳过不做处理。
在词法规则中,定义了Name、Age、Height三个关键词,以及STRING和NUM