ANTLR在嘈杂的数据流上

时间:2010-11-30 05:05:23

标签: parsing antlr grammar noise-words

我是ANTLR世界的新手,我正在试图弄清楚如何使用这个解析工具来解释一组“嘈杂”的字符串。我想要实现的目标如下。

让我们以这句话为例:It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV

我想要提取的是CATSLEEPINGSOFA,并且语法很容易匹配以下模式:SUBJECT - VERB - INDIRECT OBJECT ...我可以在哪里定义

VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';

等等。我不想最终得到一个永久的“NoViableException”,因为我无法描述语言结构的所有可能性。我只想撕掉无用的单词,只留下有趣的单词
更像是我有一个tokeniser并且问解析器“好的,直到你找到一个SUBJECT读取流,然后忽略其余的直到你找到一个VERB等等。”

我需要在一个没有组织的集合中提取一个有组织的结构...例如,我希望能够解释(我不是在判断这种完全基本和不正确的'英语语法'观点的相关性) /> SUBJECT - VERB - INDIRECT OBJECT
INDIRECT OBJECT - SUBJECT - VERB

所以我会解析像

的句子 It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV



It's 10PM and, on the SOFA in front of the TV, the Lazy CAT is currently SLEEPING heavily

1 个答案:

答案 0 :(得分:3)

您只能创建几个词法规则(例如,您发布的规则),并且作为最后一个词法规则,您可以匹配任何字符并skip()

VERB            : 'SLEEPING' | 'WALKING';
SUBJECT         : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY             : . {skip();};

此处的顺序非常重要:词法分析器尝试从上到下匹配令牌,因此如果它不能匹配任何令牌VERBSUBJECTINDIRECT_OBJECT, “落到”ANY规则并跳过此令牌。然后,您可以使用这些解析器规则来过滤输入流:

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  

将解析输入文本:

  

现在是晚上10点,懒人猫正在睡觉   严重依赖电视机前的SOFA。狗狗   正在SOFA上行走。

如下:

alt text

相关问题