从antlr令牌生成代码

时间:2015-04-14 09:23:28

标签: java antlr token cobol

我们正在尝试使用antlr生成新代码。我们有一个几乎可以识别所有内容的语法文件。现在,我们的问题是我们希望能够使用我们生成的令牌再次创建代码来创建这个新文件。

我们的.txt文件包含我们的令牌,如下所示:

[@0,0:6='       ',<75>,channel=1,1:0]
[@1,7:20='IDENTIFICATION',<6>,1:7]
[@2,21:21=' ',<75>,channel=1,1:21]
[@3,22:29='DIVISION',<4>,1:22]
[@4,30:30='.',<3>,1:30]
[@5,31:40='\n       \t ',<75>,channel=1,1:31]
[@6,41:50='PROGRAM-ID',<16>,2:9]
[@7,51:51='.',<3>,2:19]
[@8,52:52=' ',<75>,channel=1,2:20]
[@9,53:59='testpro',<76>,2:21]
[@10,60:60='.',<3>,2:28]
[@11,61:70='\n       \t ',<75>,channel=1,2:29]
[@12,71:76='AUTHOR',<31>,3:9]
[@13,77:77='.',<3>,3:15]

或者是否有另一种使用令牌创建旧代码的方法?

提前致谢,Viktor

1 个答案:

答案 0 :(得分:0)

使词法分析器输出可移植的最直接方法是序列化词法分析器的标记化输出以进行传输和存储。您可以同样序列化整个解析器生成的解析树。在任何一种情况下,您都将捕获源输入的全文。

词法分析器流对象的内在复杂性是单个类。解析树对象的复杂性也很小,只涉及少数标准类。因此,序列化的复杂性和反序列化几乎完全是解析源输入大小的线性函数。

Google Gson是一个简单易用,相对较快的Java对象序列化库。

如果您的解析器正在生成解析源输入的某些中间表示,您可以使用定义的记录序列化库(如Google FlatBuffers)直接传输IR以保存&amp;恢复IR模型实例。