У меня есть следующая грамматика, и я не знаю, как ее исправить. Я проверить, что если это ambiguos с условиями Wirth, но, возможно, это не имеет никакого значения, потому что зубры использовать LR-анализатор:Помогите с этой грамматикой, XMl в Bison
Первая версия, 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- действительное слово, и текст - это текст без какого-либо специального символа, а и - строка, которая окружает объявление 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
Это домашнее задание? – LarsH 2010-11-26 13:50:17