2010-11-26 72 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