2010-11-26 73 views
0

我有以下語法,我不知道如何解決它。我檢查,如果是ambiguos與維爾特條件,但也許是因爲野牛使用LR解析器,這是無關緊要的:幫助這個語法,XMl在野牛

第一個版本,7移位/減少

S->DE 
D->aKc 
E-><J K E2 
E2-> /> | > H I 
I-> </J> 
K-> | KL 
L-> j ='N' 
H-> | HT 
T-> N E3 
E3-> | E N 
N -> | N N2 
N2-> text | j 

其中j是一個有效的話,並且文本只是沒有任何特殊字符的文本,a和c是圍繞xml聲明的字符串。 出現的衝突之一是移動/減少,導致規則E3 - >/爲空 /無用。

我做一些改進與小量過渡

第二版2shift /減少

S-> D E 
D-> a D2 
D2->|K c 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > HI 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J 
H-> HT | T 
T-> N|E 

2移減少的問題是讀出的X或按J之後,並自帶其他X或按J ,它不知道它是否減少T或移位並準備使用N> N N2 | N2

第三版2shift /減少,但認識我的良好示例XML文件

S-> D E 
D-> a D2 
D2-> K c | c  // a is "<?xml version=\"1.0\"" and c is "?>" 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > E3 // this is the other correction, for the case of an empty element 
E3-> HI | I 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J // X and J are word(any strange word) and ValidWord(used in element and atributes names) 
H-> HT | T 
T-> N|E 
+0

這是功課嗎? – LarsH 2010-11-26 13:50:17

回答

1

這是我們所隱藏的,因爲它可以讓我想象你得到很多的衝突。第N條中的左遞歸 - > | N N2表示無限循環,其中第二個N使用第一個規則不斷減少爲空。

如果E3->空且N->空然後T->空,並且如果H->在其第一個子句中爲空,則由於HT->空而導致H->空。等等。

我會更容易理解一些解析器的寫法。

+0

謝謝,是的,我遇到了嚴重的麻煩,我讀了野牛文檔,他們建議如果你必須把它遞歸,它必須在左邊。我做了一些玩具的例子,但我需要的是,這是一個解析器的XML ...我總共得到7班/減少衝突,我的主要限制是如何處理epsilon轉換,並沒有打破解析器的有效性。 ..我會繼續閱讀,如果有任何改進,我會通知你 – mjsr 2010-11-26 15:08:30