PGPC представляет собой библиотеку парсер комбинаторов для Python, вдохновленную Parsec.
Название библиотеки представляет собой акроним: Parser Generator based Parser Combinators. Отличительной идеей библиотеки является эмуляция do
-нотации при помощи yield
и декоратора @pgpc.parser.topology
, что позволяет поддерживать плоскую структуру кода:
from pgpc.parser import topology, position, char, Parser
from pgpc.scanner import TextScanner, Position
@topology
def parse_text(text: str):
start = yield position()
parsed = []
for letter in text:
last_parsed_letter = yield char(letter)
parsed.append(last_parsed_letter)
end = yield position()
return parsed, start, end
if __name__ == '__main__':
text = "Hello, World!"
test_parser: Parser[str] = parse_text(text)
parsed, start_position, end_position = test_parser(TextScanner(text))
Релиз содержит основные абстракции библиотеки (Scanner, Parser), а так же декоратор parser.topology
, который позвояет использовать yield
для возвращения разобранного результата из входной строки.
>>> Подробности