帮助这个语法,XMl在Bison

时间:2010-11-26 12:31:51

标签: xml grammar bison

我有以下语法,我不知道如何解决它。我检查一下,如果它是与Wirth条件的模糊,但也许这是无关紧要的,因为野牛使用LR解析器:

第一版,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-> /变得无用。

我对epsilon过渡进行了一些改进

第二版本2shift / reduce

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 / reduce,但很好地识别我的样本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

1 个答案:

答案 0 :(得分:1)

这就像它可以得到的一样神秘,我想你会遇到很多冲突。

条款N中的左递归 - > | N N2表示无限循环,其中第二个N使用第一个规则连续减少为空。

如果E3->空并且N->空,则T->空,并且如果在其第一个子句中H->空,则其遵循H->空,因为HT->空。等等。

我从更容易理解解析器编写开始。