2010-11-19 4 views
0

Вот простое объяснение проблемы. Имейте в виду, что это не настоящая проблема.bison: Не могу решить конфликт, какой маршрут я должен взять?

Позволяет сказать, что на моем языке функции не могут возвращать указатели, а члены-вары не могут быть ссылками. Зубр жалуется (с 40 проблемами уменьшения/уменьшения) о том, чтобы не выводить, если тип типа является функцией или переменной-членом. Я знаю это, но его смешно иметь> 40 конфликтов из этой одной линии.

Class Name { ... 
Type& func() { 
Type* Var=0 
Type What 

Как я должен справиться с этим? должен ли я использовать% glr-parser и установить expect/expect-rr на значение? или я должен использовать Type, у которого есть все, и фильтровать то, что является законным или нет в коде? Похоже, что у моих выборов больше конфликтов/двусмысленности VS, написавших больше кода, чтобы справиться с этим. Я не уверен, что хуже, поэтому я задаюсь вопросом, нужно ли кому-либо из вас решить эту проблему.

ответ

2

Вы не должны пытаться выразить ограничения типа в грамматике. Это было убедительно доказано фиаско Алгол-68, задокументированное Виртом и другими.

+0

Любая ссылка на это? ОК, поэтому я должен написать более общий синтаксис и использовать код, чтобы сказать, если его недействительный синтаксис или нет. – 2010-11-21 21:49:46

+1

Это хорошо известный фиаско. Он широко документирован в документах конференций ACM History of Programming Languages. Вы должны использовать грамматику только для выражения синтаксиса и выполнять семантическую проверку как отдельную фазу во время пост-обработки дерева синтаксиса. – EJP

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