我们需要从数据文件中提取可变长度的文本块,并且一直在尝试编写语法文件。有两个主要挑战。首先,文本的长度可变。其次,没有可以帮助我们找到文本块的锚点。基本上,我们尝试解析大型机生成的基于文本的字母,以从文件的特定部分提取信息,然后使用ANTLR中的键值对填充Adobe表单。在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' )+