![](https://img-blog.csdnimg.cn/20210418211135744.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
使用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 · 448 阅读 · 0 评论 -
04-语法的调试
前面三篇文章,已经介绍了使用antlr分析结构化文本数据的完整流程。接下来我们将进一步深入语法定义这一部分。 调试工具 如果每修改一处语法,就需要经历整个cpp项目编译流程的话,那耗费的精力就太多了。所以官方提供了几个语法的调试工具。 第一个是插件型的,有idea插件,有vscode,vs的等,可以根据情况下载使用。我自己的电脑上有idea的,其界面如下: 第二种是Antlr工具包自带的,使用也比较简单,只不过需要手动生成java目标文件并编译成class文件,然后才能测试。 为了方便,这里使用自带的调试原创 2021-04-20 01:05:52 · 145 阅读 · 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 · 712 阅读 · 0 评论 -
01-编译运行时
简介原创 2021-04-19 16:34:43 · 207 阅读 · 0 评论