Может ли кто-нибудь привести пример грамматики Bison для объявления функций и использования функций, чтобы синтаксический анализатор вырабатывал ошибку, если количество аргументов в объявлении и использовании различается?
Пример грамматики Bison для объявления и использования функции
Ответы (1)
Такое решение не может быть принято с помощью контекстно-свободной грамматики, т.е. невозможно записать его в «чистую» грамматику, используемую Bison («чистая» означает грамматику, содержащую только правила с символами и без встроенных действий).
Для выполнения своей задачи вам необходимо добавить семантические действия к соответствующим правилам вашей грамматики, которые используют таблицу символов для передачи информации о количестве функций аргумент между объявлением и использованием этой функции (в правиле объявления вы добавляете запись в таблицу символов, а в правиле использования функции вы проверяете количество аргументов).
Традиционно такие проверки считаются частью семантического анализа и часто выполняются на отдельном этапе после синтаксического анализа (синтаксического анализа).