Пример грамматики Bison для объявления и использования функции

Может ли кто-нибудь привести пример грамматики Bison для объявления функций и использования функций, чтобы синтаксический анализатор вырабатывал ошибку, если количество аргументов в объявлении и использовании различается?


person ibrar arshad    schedule 10.11.2015    source источник
comment
Боюсь, что такое решение не зависит от контекста, поэтому не может быть принято с помощью контекстно-свободной грамматики.   -  person Jiri Tousek    schedule 10.11.2015
comment
Привет, Иржи. Не могли бы вы немного уточнить? Исходя из вашего ответа, я предполагаю, что мне нужно будет проверить такое условие на этапе создания кода, а затем   -  person ibrar arshad    schedule 10.11.2015
comment
Развернулся до полного ответа.   -  person Jiri Tousek    schedule 10.11.2015


Ответы (1)


Такое решение не может быть принято с помощью контекстно-свободной грамматики, т.е. невозможно записать его в «чистую» грамматику, используемую Bison («чистая» означает грамматику, содержащую только правила с символами и без встроенных действий).

Для выполнения своей задачи вам необходимо добавить семантические действия к соответствующим правилам вашей грамматики, которые используют таблицу символов для передачи информации о количестве функций аргумент между объявлением и использованием этой функции (в правиле объявления вы добавляете запись в таблицу символов, а в правиле использования функции вы проверяете количество аргументов).

Традиционно такие проверки считаются частью семантического анализа и часто выполняются на отдельном этапе после синтаксического анализа (синтаксического анализа).

person Jiri Tousek    schedule 10.11.2015