2010-11-30 99 views
2

我是ANTLR世界的新手,我想弄清楚如何使用這個解析工具來解釋一組「嘈雜」的字符串。我想達到的是以下幾點。

讓我們舉個例子這句話:It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TVANTLR嘈雜的數據流

我想什麼來提取是CATSLEEPINGSOFA,並且具有容易匹配下面的模式是一個語法:SUBJECT - 動詞 - 間接對象......我哪裏可以定義

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

等。我不想與一個永久的「諾維結束因爲我無法描述語言結構的所有可能性。我只是想撕開無用的單詞,只保留有趣的單詞。

它更像是如果我有一個tokeniser,問分析器「好吧,讀取流,直到找到一個主題,然後忽略其它,直到你找到一個動詞,等等。」

我需要提取在聯合國組織的一系列有組織的結構...例如,我想能夠解釋(我不是判斷「英語語法」的這一基本完全和不正確的觀點的針對性)
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

回答

3

您可以創建只有一對夫婦的詞法規則(您發佈的,例如),並作爲最後的詞法規則,你可以匹配任何字符和skip()它:

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

訂單在這裏很重要:詞法分析器試圖從上到下匹配令牌,因此如果它不能匹配任何令牌VERB,SUBJECTINDIRECT_OBJECT,它將「落入」ANY規則並跳過此令牌。然後,您可以使用這些語法規則來過濾你的輸入流:

parse 
    : sentenceParts+ EOF 
    ; 

sentenceParts 
    : SUBJECT VERB INDIRECT_OBJECT 
    ; 

將解析輸入文本:

這是10PM和懶貓目前SLEEPING 嚴重沙發在電視機前。 DOG 在SOFA上行走。

如下:

alt text

+1

這正是我想要實現的!這是比JavaCC更直觀的處理這種過濾器 – BlackLabrador 2010-11-30 10:24:33