Содержание
- 3. Определения Задание стартового нетерминала %start Определение терминалов %token Задание ассоциативности операторов %left %right %nonassoc
- 4. Примеры Задание приоритета и ассоциативности символов %nonassoc ‘ ’ ‘=‘ %left ‘+‘ ‘-’ OR %left ‘*‘
- 5. Продукции и семантические правила Продукция A → B C на языке Yacc записывается: A : B
- 6. Пример %left ‘+‘ ‘-’ %left ‘*‘ ‘/’ %token NUM %% expr : expr ‘+‘ expr |
- 7. Семантические действия Имена атрибутов $$ - атрибут нетерминала левой части $i – атрибут i-того грамматического символа
- 8. Пример %left ‘+‘ ‘-’ %left ‘*‘ ‘/’ %token NUM %type expr %% expr : expr ‘+‘
- 9. Действия внутри правой части Определение x : y { action; } z заменяется на x :
- 10. Работа синтаксического анализатора %token NUM %left '+' %left '*' %% expr : expr '+' expr |
- 11. Работа синтаксического анализатора state 5: expr : expr '+' _ expr '(' shift 2 NUM shift
- 12. Дополнительная продукция state 0: $accept : _ expr $end '(' shift 2 NUM shift 3 .
- 13. Пример конфликта сдвиг-свертка %token if then else %% stmt : if expr then stmt | if
- 15. Скачать презентацию