2010-10-16 1 views
0

Я сейчас в классе по разработке системного программного обеспечения. Мы пишем двухпроходный ассемблер для языка ассемблера вымышленной машины. Мы внедрили токенизатор, и все классы, которые нам нужно абстрагировать, представляют эту программу - все, что осталось (помимо реализации генератора кода на более поздней стадии), - это проанализировать токены. Вот где у меня серьезная проблема. Я решил реализовать это как парсер рекурсивного спуска, так как это единственный метод, с которым я в настоящее время сталкиваюсь ... но нам не разрешено останавливать сборку при синтаксических ошибках. Например, если пользователь выдает команду слова нагрузки с недопустимым синтаксисом, мы должны заменить его на NOP. Если пользователь дает плохую метку, мы просто игнорируем ее. Если пользователь помещает неизвестные символы в строку, мы отбрасываем их.Как справиться с невозможностью разбить синтаксические ошибки в парсере рекурсивного спуска

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

Это превращает программу из реального рекурсивного анализатора спуска в более полу-конечный автомат. Я чувствую, что делаю это плохо, но я не уверен, как это реализовать. У кого-нибудь есть предложения/идеи?

BTW - Мне не разрешено использовать такие инструменты, как ANTLR или любой другой генератор синтаксического анализатора.

Спасибо.

ответ

1

Мое предложение было бы не пробовать. Плохое восстановление синтаксических ошибок присуще рекурсивным синтаксическим анализаторам. Если вам не разрешено использовать генератор парсера, то достойное восстановление синтаксических ошибок, вероятно, выходит за рамки вашей домашней работы. (Проконсультируйтесь с вашим инструктором ...)

+0

Ха-ха, мне нравится ваша идея ... к сожалению, это не вариант. Мы должны выполнить восстановление синтаксиса. Учитывая это, любые мысли? Существует ли синтаксический анализ помимо рекурсивного синтаксического анализа, который лучше подходил бы для такого рода вещей? – rybosome

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