我目前正在参加“编译器构建”课程,我正在Antlr 4中开发一个简化的Java语法。涉及Java语法的部分工作得很好,除了它与原始Java略有不同。
我被告知我不应该使用括号而是使用缩进。我已经尝试了一些来自互联网的例子,只有Antlr 3的例子在Antlr 4中不起作用。
任何人都可以帮我解决这个缩进问题,或者为Antlr 4提供Python语法吗?
答案 0 :(得分:1)
官方GitHub ANTLR4 grammar repository怎么样?您可以找到许多常用语言语法。甚至还有一个python3 directory包含Python3.g4
。
这应该会帮助你。
答案 1 :(得分:0)
我写了一个小型库来帮助完成这个用例:antlr-denter。
简而言之,你在你的语法中定义了INDENT和DEDENT标记,做了一些样板文件来将antlr-denter挂钩到antlr生成的词法分析器中,然后离开你。例如,代码如下所示:
// remove the outer quotes so they are json objects then json encode.
var pMaster = JSON.stringify({"tid" : "474", "fid":"2"});
var pDetail = JSON.stringify(
{"[{"recid":5618,"tid":"474","itemid":"1435","nar1":""},
{"recid":5619,"tid":"474","itemid":"1203","nar1":""},
{"recid":5620,"tid":"474","itemid":"1205","nar1":""}]);
// then create e by stringify a second time
var e = JSON.stringify({PurcMast: pMaster , PurDetail: pDetail });
可能会生成令牌流hello:
world
<eof>
。