2010-11-26 2 views
0

У меня есть следующая грамматика, и я не знаю, как ее исправить. Я проверить, что если это 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 
+0

Это домашнее задание? – LarsH 2010-11-26 13:50:17

ответ

1

Это примерно так же загадочно, как он может получить, и я полагаю, что вы получаете много конфликтов.

Левая рекурсия в пункте N -> | N N2 предлагает бесконечный цикл, в котором 2-й N непрерывно уменьшается до пустого с использованием 1-го правила.

Если E3-> пустое и N-> пустое, то T-> пустое, а если H-> пусто в первом предложении, то H-> пусто, так как HT-> empty. И так далее.

Я бы начал с чего-то более легкого, чтобы лучше разобраться в написании парсера.

+0

спасибо, да, у меня серьезные проблемы с этим, я прочитал документацию о зубре, и они рекомендуют, чтобы, если вы должны поставить рекурсию, она должна быть слева. Я сделал несколько примеров игрушек, но мне нужно это, синтаксический анализатор для xml ... я получаю в общей сложности 7 смен/уменьшает конфликты, мое основное ограничение - это то, как справляться с переходом epsilon и не нарушать действительности синтаксического анализатора. .. я продолжу чтение, если сделаю какое-либо улучшение, я сообщу вам – mjsr 2010-11-26 15:08:30

Смежные вопросы