java ANTLR4:对可以跨行拆分的关键字进行词法分析

b4lqfgs4  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(97)

我试图得到一个解析器的IBMBMS语言工作,并遇到了一个问题。在这种语言中,某些内容必须放在某些列中,如果它们太长而放不下,那么您可以在第72列中放置一个“继续字符”,以指示内容在下一行继续。第72列之后的字符应该被忽略(它们本质上是注解)。所以一条线可以是这样的…

DFHMDF POS=(3,39),LENGTH=9,INITIAL='VERSION :',ATTRB=(ASKIP,NO*00000250
           RM)                                                      00000260

字符串
...并且它应该将属性解析为“ATTRB=(ASKIP,NORM)”。我需要lexer将“NORM”作为单个标记发出。请注意,这种分割可以发生在任何关键字的任何部分(并且有很多)。
我只是想知道是否有人有任何想法(或指向文档的指针),关于使用Antlr4解决这个问题的最佳方法。我有一个独立的词法分析器和语法分析器,我在使用词法分析器时取得了一些有限的成功,但它很快就变得非常混乱。
我不是antlr4Maven,但到目前为止我所阅读到的一切似乎都表明,使用这种解析器并不容易完成这种事情(我开始怀疑是否需要手工制作一些东西)。

z0qdvdin

z0qdvdin1#

我有一个类似的任务要完成(解析C头文件),其中continuation,stringizing等。是常见的事情,我的方法是实现一个预处理器,它首先处理源代码行,例如。它在找到行连续字符的地方拼接行。这样做的结果是非常直接地进行正常的解析。
所以我建议做这样一个行基础的预处理步骤,在那里你删除行结束注解,然后拼接分割行。然后将此文本提供给解析器,如果解析器也要处理基于行的任务,那么解析器就可以比它必须要简单得多。

相关问题