antlr4 爬坑日记
发布日期:2022-02-24 11:35:59 浏览次数:11 分类:技术文章

本文共 1184 字,大约阅读时间需要 3 分钟。

antlr4 实现 json 编译器

这学期编译原理没怎么上过课,老师突然要我们做个编译器,看着挺高大上的,其实还是不难的,顺便把以前对编译的一些想法给强化了一下,闲话少说,下面进入正题:

- 下载安装

1.首先确定你的电脑中装好了java环境:

在cmd中输入java 与 javac就可以检测,然后下载
2.下载jdk:地址:
3.设置classpath,在命令行里输入: SET CLASSPATH=.;你的路径\antlr-4.0-complete.jar;%CLASSPATH%
4.设置快捷命令(这一步可以省略):
创建文件夹,在文件夹里新建两个bat文件:
里面内容如下:
antlr4: java org.antlr.v4.Tool %*
grun: java org.antlr.v4.runtime.misc.TestRig %*
(这里实际上是设置一个快捷键,用antlr4或grun 代替后面的调用语句)

- json语言的语法分析

实际上json就array与object两种对象

然后其中包含了对value ,string的一些理解,具体看下面这个链接
整合成代码如下:
grammar JSON;
json: object
| array ;
object: ‘{’ pair (‘,’ pair)* ‘}’
|’{’ ‘}’ ;
pair : STRING ‘:’ value;
array: ‘[’ value (‘,’ value)* ‘]’
| ‘[’ ‘]’;
value: STRING
|NUMBER
|object
|array
|’true’
|’false’
|’null’
;
STRING: ‘”’ (ESC | ~[“\”])* ‘”’;
fragment ESC : ‘\’ ([“\/bfnrt]|UNICODE);
fragment UNICODE: ‘u’ HEX HEX HEX HEX;
fragment HEX: [0-9a-fA-F];

NUMBER: ‘-’ ? INT ‘.’ INT EXP ?

| ‘-’ ? INT EXP
| ‘-’ ? INT;
fragment INT: ‘0’|[1-9][0-9]*;
fragment EXP: [Ee] [+-]? INT;
WS : [\t\n\r] + ->skip;

- 编译运行

首先将上面的语法代码存在JSON.G4文件里

然后在文件路径下运行以下的代码:
这里写图片描述
结果出现这些文件:
这里写图片描述
然后运行在命令行运行:
grun JSON json -tokens
[输入json句子]
grun JSON json -tree
[输入json句子]
然后得到所需的token流,以及语法树

下面是对数组[1,‘u0049’,1.3e9]的测试结果

这里写图片描述

转载地址:https://blog.csdn.net/ImposterSyntrome/article/details/71506551 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:微软的cpprestsdk真的不咋地
下一篇:机器学习之训练集,测试集,验证集划分

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年08月24日 13时02分11秒