2010-10-27 9 views
3

У меня проблемы с BNF. Я не могу сказать, что, по-видимому, является стандартным способом выполнения вещей (если таковой существует), и существуют ли такие типы, как char или int или что-то еще, что уже встроено.Что происходит между {и} при написании BNF?

Однако моя основная проблема не в том, понять, как работает часть BNF в фигурных скобках.
Учитывая то вроде:

exp : term       {$$ = $1;} 
| exp '+' term     {$$ = $1 + $3;} 
| exp '-' term     {$$ = $1 - $3;} 
; 

(Это было сподручно украдено откуда-то, и для YACC/C)

Какие вещи в фигурные скобки фактически говоря? Я тоже посмотрел на подобную вещь для генератора счастливого парсера и тоже был смущен.

+0

Это домашнее задание? – jcolebrand

+0

О, и на самом деле это не BNF. –

+0

@drachenstern: Хотя этот вопрос в первую очередь задают, потому что я смотрю на BNF, потому что мне придется писать что-то для Happy, чтобы создать парсер для игрушечного языка для назначения компилятора, это не вопрос сам по себе. Я не понимал, на что я смотрел, когда я искал поиски, поэтому спрашивал. Так что это не домашнее задание, но оно связано с работой, установленной для моей степени. Даже тогда, это не то, что я прошу кого-то сделать работу для меня, я объясню. – Squidly

ответ

2

Вам необходимо различать BNF в целом (и EBNF) и синтаксис Yacc. То, что фигурные скобки означают в BNF, зависит от диалекта; это часто означает «выбрать одну из альтернатив», или это может быть связано с повторением, или и то, и другое. В EBNF (ISO 14977: 1996) «{...}» означает повторение нуля или более раз, а «{...} -» означает повторение один или несколько раз (и почему это «-», а не «+» - таинственный). IETF использует RFC-5234, и его диалект BNF вообще не использует '{}'.

В грамматике Yacc фигурные скобки заключают действия, которые должны выполняться при согласовании правила (уменьшенном на жаргоне). Таким образом, действие «{$$ = $1;}« действие »присваивает значение, согласованное« термином », с результатом сокращения« exp :: = term »(с использованием другого варианта BNF).

2

Материал в фигурных скобках - это код C, который выполняется при анализе соответствующего правила. Символы $ являются заполнителями, которые заменяются фактическими значениями, проанализированными yacc: $$ - результат, который вы хотите вычислить, а $1 - $n представляют значения символов в правой части правила.

Например, правило exp '+' term { $$ = $1 + $3; }, $1 относится к exp и $3 является term, так это говорит о том, что, когда это правило разобран, добавьте exp и term, чтобы получить результат.

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

  • Нет связанных вопросов^_^