@EgaNator
Учусь на программиста

Проблемы в реализации синтаксического анализатора?

Здравствуйте, бьюсь уже несколько дней, надеюсь на помощь. Задача состоит в реализации синтаксического анализатора. Краткая суть такая: есть текстовый файл, в котором записан какой-то код программы, согласно моей грамматике. Он проверяется лексическим анализатором, который выделяет лексемы. А затем уже синтаксическим на наличие ошибок. Если ошибок нет, то всё хорошо. А если есть (например, в конце строки не стоит ";"), то выводится сообщение, в котором указано, где ошибка, и что это за ошибка, как в компиляторе. Вот у меня есть такой код, но не для моей грамматики. У меня не получается заставить его корректно работать. Дальше лексического анализа он не уходит.

<Программа> ::= <Объявление переменных> <Описание вычислений>
<Описание вычислений> ::= Begin <Список присваиваний> End
<О6ъявление переменных>::= <Тип переменных> <Список переменных>
<Тип переменных> ::= Integer|Long Integer
<Список переменных> ::= <Идент>| <Идент>,<Список переменных>
<Список присваиваний>::= <Присваивание>|<Присваивание> <Список присваиваний>
<Присваивание> ::= <Идент> = <Выражение> ;
<Выражение> ::= <Ун.оп.> <Подвыражение> | <Подвыражение>
<Подвыражение> :: = ( <Выражение> ) | <Операнд> |
 <Подвыражение> <Бин.оп.> <Подвыражение>
<Ун.оп.> ::= "-"
<Бин.оп.> ::= "-" | "+" | "*" | "/"
<Операнд> ::= <Идент> | <Константа>
<Идент> ::= <Буква> <Идент> | <Буква>
<Константа> ::= <Цифра> <Константа> | <Цифра>


Код программы приведу в комментарии, так как он сюда не влезет.
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
Вы хотите работу сокурсника переделать под свое задание что ли?

Если вы хотите научиться писать компиляторы-анализаторы, то стоит понимать что это тема фундаментальная и сначала надо вникнуть в теорию, а потом уже писать код. По другому не получится.
тут стоит начать с классики https://en.wikipedia.org/wiki/Compilers:_Principle...
ну или хотя бы вникнуть как работают синтаксические анализаторы, какие бывают, и все так далее. Разобрать текст на лексемы - это самый простой шаг, можно сказать примитивный.

взять код от одной грамматики и переделать его под другую без понимания что в нем вообще происходит - такое себе развлечение. А если понимание есть - то вы просто берете и пишете этот код.

Если вам просто надо чтобы кто-то за вас "код подправил", то это не тот ресурс.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Да тут не вопрос, а целое задание для фриланса. Не знаю чем автор занят, репостом ли чужих задач или решением своих но тут надо просто готовить котлету денег.

Или сильно сильно упростить вопрос чтобы он хотябы был осязаем для вопросника.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы