Советы по генераторам парсеров на Python
Эй, ребята, это мой первый вопрос здесь о переполнении стека, и мне было интересно, могу ли я попросить совета у людей, которые знают немного больше о генераторах Python и Parser, чем я.
мне дали задачу, где я должен создать парсер для простого C-подобного языка. Я могу использовать любой язык программирования и инструменты, которые я хочу создать парсер, но я изучаю Python в то же время, поэтому это будет мой предпочтительный выбор.
есть несколько ограничений my Парсер должен следовать. Во-первых, он должен иметь возможность читать в текстовом файле, который содержит следующую информацию:
kind1 : spelling1
kind2 : spelling2
kind3 : spelling3
.
.
.
kindn : spellingn
где каждый вид и правописание относятся к типу токена и значению языка. Этот файл является результатом ввода образца кода через лексический анализатор языка.
во-вторых, я должен иметь возможность настроить выход парсера. В идеале я хотел бы вывести файл, который преобразовал kind: spelling list в другую последовательность токены, которые будут переданы компилятору языка для преобразования в код сборки 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 и если бы я мог достичь того, что я ищу в приведенных выше примерах.
3 ответов
когда 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 )
похоже pyparsing работа для меня. И это также позволяет относительно легко манипулировать выходом.
Я рекомендую вам проверить Lark:https://github.com/erezsh/lark
Он может анализировать все контекстно-свободные грамматики, он автоматически создает AST (с номерами строк и столбцов), и он принимает грамматику в формате EBNF, который прост в написании, и он считается стандартным.