作者回复: 非常感谢你的整理!
其他同学可以参考你的配置方法!
作者回复: 哇,练习自己写规则,太帮了!
自己动手所获得的感觉是难以替代的。
中间过程遇到的每个坑,都是自己的积累!
另外,这里也有几个swift的规则文件可以参考:
https://github.com/antlr/grammars-v4
作者回复: expression前要有空格,前面没有antlr。
grun antlrtest.PlayScript expression -gui
我请编辑把那个空格加上。
作者回复: 可能是CLASSPATH设置的问题,或者是运行grun命令的目录不对。参见我整理的一篇文字,梳理了antlr使用的要点:
https://github.com/RichardGong/PlayWithCompiler/blob/master/antlr_install.md
作者回复: 感谢分享!
我这两天整理了Antlr使用的要点,可以参见这里:
https://github.com/RichardGong/PlayWithCompiler/blob/master/antlr_install.md
作者回复: 1.grun是用的Class文件,是java类。
2.但运行grun的时候,最好就在CLASSPATH的目录下。
假设,class和g4文件位于:
playscript-java/src/main/play
其中play是包名,而CLASSPATH设置的是:
playscript-java/src/main
那么你就在main这个目录下运行grun。
如果都不带包,就更简单一些,让grun就在带有class和.g4的目录中运行就好。
如果还有问题的话,请继续再问!
作者回复: 再检查一下规则文件。
你看看你的词法规则里是否给加号和减号起了ADD和SUB这样的名字,就像下面这样。
ADD : '+';
SUB : '-';
只要有这样的定义,在语法里无论用ADD还是用'+',都会生成ADD()这样的方法。
作者回复: windows下用^Z?我都没注意到这点。
好的,一个有用的知识,应该加到文稿中去。
谢谢你的提醒!
20年前开始学unix命令的时候,就一直用^D,完全没注意到在windows下的用法:-D
作者回复: 这个问题的原因是antlr的jar包没有放到CLASSPATH中。
我这两天整理了antlr安装、配置、使用的一些信息,写了一个说明文件,你可以参考一下:
https://github.com/RichardGong/PlayWithCompiler/blob/master/antlr_install.md
作者回复: 感谢经验分享!
还有一个同学建议用maven管理项目,pom里面加上对antlr的依赖就行了,这样开发环境的维护会比较简单。
但是要用命令行工具的话,还是要像你一样做一下环境变量的配置。
作者回复: 也感谢你留的小Tip!
作者回复: 太好了,其他同学可以参考你这篇文章!
分号的问题,原来是输入法导致的....也好,又增长了一个经验!
作者回复: Antlr语法规则,每行后面都要有分号。是不是有哪句忘了写分号呢?
作者回复: 看来你真的比较喜欢编译技术:-)
作者回复: 据我所知,Tree Pattern Matching这类问题,从上世纪80年代就有研究,所以有很多这样的算撒。我们后端的指令选择问题,本质上也是树匹配。
有人用树的匹配去分析源代码。这样的话,源代码会变成结构化的信息,因此能带来额外的优势。
我相信,把源代码先变成结构化的数据(AST),然后再分析,也会用于人工智能编程领域。
作者回复: 多动手才会有感觉!
作者回复: 意思是:第一个字符必须是字母,之后的字符可以是字母或数字。
作者回复: 一起努力!