Parsing 噪声数据流上的ANTLR

Parsing 噪声数据流上的ANTLR,parsing,antlr,grammar,noise-words,Parsing,Antlr,Grammar,Noise Words,我是ANTLR领域的新手,我正在尝试找出如何使用这个解析工具来解释一组“嘈杂”字符串。我希望实现以下目标 让我们以这句话为例:现在是晚上10点,懒猫正在电视机前的沙发上酣睡 我想提取的是CAT、sleep和SOFA,并且有一个语法可以很容易地匹配以下模式:主语-动词-间接宾语。。。在那里我可以定义 动词:'睡觉'|'走路' 主题:“猫”|“狗”|“鸟” 间接_对象:“汽车”|“沙发” 等等。。我不想以一个永久的“NoViableException”结束,因为我无法描述语言结构周围的所有可能性。

我是ANTLR领域的新手,我正在尝试找出如何使用这个解析工具来解释一组“嘈杂”字符串。我希望实现以下目标

让我们以这句话为例:
现在是晚上10点,懒猫正在电视机前的沙发上酣睡

我想提取的是
CAT
sleep
SOFA
,并且有一个语法可以很容易地匹配以下模式:主语-动词-间接宾语。。。在那里我可以定义

动词:'睡觉'|'走路'
主题:“猫”|“狗”|“鸟”
间接_对象:“汽车”|“沙发”

等等。。我不想以一个永久的“NoViableException”结束,因为我无法描述语言结构周围的所有可能性。我只想把没用的词撕碎,只保留那些有趣的词。

这更像是如果我有一个标记器,并要求解析器“好的,阅读流直到你找到一个主题,然后忽略其余的直到你找到一个动词,等等…”

我需要在一个无组织的集合中提取一个有组织的结构。。。例如,我希望能够解释(我并不是在判断这种对“英语语法”的完全基本和错误的观点的相关性)
主语-动词-间接宾语

间接宾语-主语-动词


因此,我将分析类似于


现在是晚上10点,懒猫正在电视机前的沙发上睡得很沉


或者

现在是晚上10点,懒猫在电视机前的沙发上睡得很沉

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

VERB            : 'SLEEPING' | 'WALKING';
SUBJECT         : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY             : . {skip();};
这里的顺序很重要:lexer尝试从上到下匹配标记,因此如果它不能匹配任何标记
动词
主语
间接对象
,它将“落入”到
任何
规则并跳过此标记。然后,您可以使用以下解析器规则过滤输入流:

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  
这将解析输入文本:

现在是晚上10点,懒猫正在睡觉 沉重地坐在电视机前的沙发上。狗 她正在沙发上散步

详情如下:


这正是我想要实现的目标!在处理这种过滤器方面,这比JavaCC更直观