PLY для языка C - PullRequest
       19

PLY для языка C

0 голосов
/ 21 января 2019

Могу ли я использовать python lex yacc для лексического анализатора и парсер для исходного языка C? Фактически было написано, что yacc использует LALR-разбор, PLY использует LR-разбор, который достаточно эффективен и хорошо подходит для больших грамматик, но немного ограничивает типы грамматик, которые могут быть успешно проанализированы. Сейчас я делаю курс по компилятору и все еще делаю парсинг. Так что не разбирайтесь в разборе LALR.

1 Ответ

0 голосов
/ 21 января 2019

Компилятор GCC был реализован с использованием Bison, генератора синтаксических анализаторов LALR, в течение многих лет.LR сильнее, чем LALR, так что вы можете сделать это технически.

Теперь, хотите ли вы сделать это, это другой вопрос.LALR не помогает с некоторыми мерзкими (вау, козырь типа "сильно") функциями C, и для его работы использовались различные хаки-лексеры.(См. Мой SO-ответ о том, почему C / C ++ не может быть проанализирован с помощью чистых парсеров LR: https://stackoverflow.com/a/1004737/120163). Тем не менее, это было полезно в течение длительного времени.

Теперь, похоже, что вы делаетекласс компилятора. В этом случае вы, вероятно, реализуете не «все из C», а скорее интересное подмножество / вариант. В этом случае вы должны иметь возможность создавать свою «C-подобную» грамматику, отгибая ее от Cпроблем и продолжайте свой класс. Для вашего класса мало смысла изучать, как взламывать парсеры LALR / LR для решения странных синтаксических проблем. Что вам нужно выучить в классе, так это то, что делают парсеры и как они вписываются вОбщая структура компилятора, добавление странностей не улучшит изучение основ. Если вы закончите урок и начнете работать над созданием синтаксических анализаторов для реальных языков, вы скоро столкнетесь с этими проблемами и сможете их решить.

Разбор LALR - это хорошо, если вы решите синтаксис языка.

...