0

我们需要从我们的数据文件中提取可变长度的文本块,并且一直在尝试编写一个语法文件。有两个主要挑战。首先,文本是可变长度的。其次,没有锚可以帮助我们定位文本块。基本上,我们正在尝试解析大型机生成的基于文本的字母,以从文件的特定部分提取信息,然后使用来自 ANTLR 的键值对来填充 Adob​​e 表单。在 ANTLR 4.0 中,我们确定了一种将所有单词合并为一个标记的方法,并将它们合并,空格分隔,形成一个字符串。由于解析器和词法分析器在 4.0 中被重写,我们在 3.5 中没有相同的功能。寻求您的意见以解决问题。以下是我们一直在尝试的几件事。

我们尝试了这种编写语义谓词的方法。我们能够得到单词,但我们无法在单词之间插入空格。

@init{ int N = 0; }
  :  ( { N <= 3 }? ) =>( WORD { N++; }  )+

这是包含空白的第三种方法。我们可以在每个规则中处理它,而不是跳过WS它,但它可能会占用大量内存,这可能会导致内存空间不足的问题。

name: WORD WS WORD WS WORD;
WS    : ( ' '|'\t'|'\r'|'\n' )+
4

0 回答 0