2015-11-25 559 views
0

這是我的問題:我明天就要完成一項任務(過去幾天我一直在爲此工作),我認爲它有一半,但另一半我只是有一點線索。基本上,我有寫到哪用戶給了我一些話和他們的類別(如字典)代碼和語法如:Java中的正則表達式(正則表達式和語法)

A: article adjective A 
A: adjective B 
B: noun 

那麼用戶將輸入的句子,我會檢查的話是在我的字典中,如果是這樣的話,我會輸出他們的類別,如果它與語法相匹配則選擇「接受」,如果不匹配則輸入「拒絕」。

現在,我知道我可能將不得不使用正則表達式,但到目前爲止我沒有發現任何真正有用的東西。
我會給輸入和輸出的例子:

Input: 
Dictionary: 
word: The 
category: article 
word: big 
category: adjective 
word: blue 
category: adjective 
word: car 
category: noun 

Grammar: 
A: article adjective A 
A: adjective B 
B: noun 

Sentences: 
The big blue car 
The car big blue 

Output: 
(first sentence) 
article adjective adjective noun 
Accept 
(second sentence) 
article noun adjective adjective 
Refuse 

所以,我的程序已輸出正確的類別,但我不知道如何實現語法部分(我已經有一類具有的ArrayList爲語法)。正如我之前所說,我認爲我將不得不使用正則表達式,但到目前爲止沒有發現非常有用。

預先感謝您!

+2

如果你已經有一個句子被解析並映射到類別,那麼你對正則表達式沒有用處。您需要搜索語法規則以查看是否可以找到與類別匹配的組合。 – Andreas

+0

真的嗎?問題是我不知道如何從第一個A到第二個A然後到B. –

+0

想想我將不得不使用樹。 @ Hiro2k給了我這個建議。 –

回答

1

語法通常不是作爲正則表達式實現的,因爲它們是複雜的,並且是自引用的,正則表達式對解析傳入文本更有用。您需要的是比列表更好的數據結構來表示語法,並幫助您驗證句子在語法上是否正確。查看抽象語法樹。

+0

我一直在尋找Java中的樹(我認爲這會幫助我第一次),但只是發現二叉樹什麼都不會幫助。我會馬上查找抽象語法樹!謝謝 –

+0

Java標準庫只有最常用的數據結構,AST的非常具體,所以你可能不得不實現你自己的,我猜這是你的任務的重點。 – Hiro2k

+0

到目前爲止沒有發現任何好東西,請您推薦任何文章或教程? –

0

不能一般實行語法用正則表達式,除非它是一個正規的語言語法,例如如

expression: '(' expression ')' 

您需要的下推自動機不包含嵌套語法某種,例如遞歸下降或LALR(1)解析器。

請參閱Chomsky hierarchy

相關問題