缩进而不是Antlr4的括号

时间:2013-07-24 16:41:27

标签: java python grammar indentation antlr4

我目前正在参加“编译器构建”课程,我正在Antlr 4中开发一个简化的Java语法。涉及Java语法的部分工作得很好,除了它与原始Java略有不同。

我被告知我不应该使用括号而是使用缩进。我已经尝试了一些来自互联网的例子,只有Antlr 3的例子在Antlr 4中不起作用。

任何人都可以帮我解决这个缩进问题,或者为Antlr 4提供Python语法吗?

2 个答案:

答案 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>