使用ANTLR4及CPP分析结构化文本
文章平均质量分 73
以一个实际的小项目为核心,逐步实现使用Antlr4分析结构化文本数据的目的,其本质是写一个小Parser。
温铜
国际逗比协会荣誉会长
展开
-
05-语法规则的定义(1)
基本规则[],任意一个[]内的字符,比如[0-9]表示任意一个数字~[],任意一个不是[]内的字符,比如 ~[0-9]表示不能为数字。+,表示之前的字符,至少有一个,比如[a-z]+表示任意英文字母串。*,表示之前的字符,可以0个,可以多个。比如[a-z]*表示可以0个字母,也可以表示一个字母串。[1-9][0-9],表示一个数,如123。其首位不能为0。\t,tab键。\r,回车键。\n,换行符。windows下一个换行是用\r\n表示的。空白符往往使用[ \r\n\t]表示,第一个是空原创 2021-04-20 01:46:26 · 424 阅读 · 0 评论 -
04-语法的调试
前面三篇文章,已经介绍了使用antlr分析结构化文本数据的完整流程。接下来我们将进一步深入语法定义这一部分。调试工具如果每修改一处语法,就需要经历整个cpp项目编译流程的话,那耗费的精力就太多了。所以官方提供了几个语法的调试工具。第一个是插件型的,有idea插件,有vscode,vs的等,可以根据情况下载使用。我自己的电脑上有idea的,其界面如下:第二种是Antlr工具包自带的,使用也比较简单,只不过需要手动生成java目标文件并编译成class文件,然后才能测试。为了方便,这里使用自带的调试原创 2021-04-20 01:05:52 · 142 阅读 · 0 评论 -
03-编译小Parser
可以使用很多工具编译之,因为我们的运行时库是VS构建的,为了不出问题也为了操作简单,仍旧使用VS建立项目。建立工程创建一个TestL的Cpp空项目,并将Cpp文件复制到工程文件中去。注意只要cpp和h文件就可以,其他的辅助文件不需要。然后将所有的文件添加到工程中。新建一个main.cpp文件,写一个做简单的helloworld程序,如下:#include <iostream>int main(int argc, char** argv) { std::cout << "原创 2021-04-19 23:13:20 · 326 阅读 · 9 评论 -
02-结构化文本、解析规则与目标文件
简单的结构化文本为了简单起见,我们定义一种特别的格式,该格式包含三种成分,分别为Name,Age,Height。并按照如下所示的格式组织起来:Name{小明}Age{18}Height{175}Name{小强强}Age{23}Height{173}...我们需要识别出这些数据,并做出特殊的响应。定义解析规则这是一种非常简单的文本数据,其规则定义也非常简单。新建一个规则文件,命名为TestL.g4。并将以下内容复制进去。grammar TestL;doc: (NAME '{' STRI原创 2021-04-19 21:26:13 · 708 阅读 · 0 评论 -
01-编译运行时
简介原创 2021-04-19 16:34:43 · 203 阅读 · 0 评论