Советы по генераторам Parser Parser

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

Мне задали задачу, когда мне нужно создать парсер для простого языка C. Я могу использовать любой язык программирования и инструменты, которые я хочу создать парсером, но я изучаю Python одновременно, поэтому это был бы мой предпочтительный выбор.

Есть несколько ограничений, которым должен следовать мой Parser. Во-первых, он должен иметь возможность читать в текстовом файле, который содержит следующую информацию:

kind1 : spelling1
kind2 : spelling2
kind3 : spelling3
      .
      .
      .
kindn : spellingn

Где каждый вид и правописание относятся к типу и значению языка. Этот файл является результатом размещения образца кода через лексический анализатор языка.

Во-вторых, я должен иметь возможность настраивать вывод синтаксического анализатора. В идеале я хотел бы вывести файл, который преобразовал вид: список орфографии в другую последовательность токенов, которые будут переданы компилятору языка для преобразования в код сборки MIPS. Вот небольшой пример того, что я хотел бы, чтобы анализатор мог создавать:

%function int test
  %variable int x
  %variable int y
%begin
  %if %id y , %id x > %do
  %begin
    %return %num 0
  %end
  %return %num 1
%end

Было бы очень полезно, если бы кто-нибудь мог посоветовать мне существующие Python Parser Generators, и если бы я смог добиться того, что я ищу в приведенных выше примерах.

Ответ 1

PyParsing - это инструмент Python для генерации парсеров. Есть много интересных примеров.

Легко начать:

from pyparsing import Word, alphas

# define grammar
greet = Word( alphas ) + "," + Word( alphas ) + "!"

# input string
hello = "Hello, World!"

# parse input string
print hello, "->", greet.parseString( hello )

Ответ 2

Похоже на pyparsing для меня. И это также облегчает манипулирование выводами.

Ответ 3

Я рекомендую вам проверить Lark: https://github.com/erezsh/lark

Он может анализировать ВСЕ контекстно-свободные грамматики, он автоматически создает AST (с номерами строк и столбцов), и он принимает грамматику в формате EBNF, которая проста в написании и считается стандартом.