Описание тега lark-parser

Вопросы по проекту парсера Lark
1 ответ

Как разобрать неверный JSON с помощью Lark?

Давайте начнем с рассмотрения простого парсера json с использованием lark: import sys from lark import Lark, Transformer, v_args json_grammar = r""" ?start: value ?value: object | array | string | SIGNED_NUMBER -> number | "true" -> true | "fa…
16 янв '19 в 19:03
1 ответ

Правильно установить приоритеты между правилами и терминалами в грамматике для жаворонка

Я впервые пишу парсер с использованием грамматики и генератора парсеров. Я хочу проанализировать какой-то формат asn.1 с помощью модуля Lark Python. Вот пример данных, которые я пытаюсь проанализировать: text = """ start_thing { literal { length 100…
19 июн '18 в 12:31
2 ответа

Как разобрать ~{expr} внутри строки с помощью lark ebnf

Я пытаюсь написать грамматику Lark для DSL, но возникают проблемы с синтаксисом интерполяции строки: " abc " <- normal string " xyz~{expression}abc " <- string with interpolation поэтому ~{переключается со строки на выражение, а} завершает это…
13 июл '18 в 14:21
1 ответ

Разбор жаворонка в зависимости от местоположения дерева

Я пытаюсь написать грамматику Lark и парсер, чтобы написать DSL поверх numpy. Однако Transformer должен выводить код Python, а не проверять этот код. Так, например, я хотел бы иметь: my_parser("max(mat1/mat2, 20) / lag(mat1, 5)") и это даст строку: …
31 авг '18 в 12:31
1 ответ

Как добавить складывание в подкласс QsciLexerCustom?

Рассмотрим этот фрагмент: import sys import textwrap import re from PyQt5.Qt import * # noqa from PyQt5.Qsci import QsciScintilla from PyQt5.Qsci import QsciLexerCustom from lark import Lark, inline_args, Transformer class LexerJson(QsciLexerCustom)…
22 май '18 в 03:27
2 ответа

Приоритет в грамматике с использованием Lark

У меня есть проблема с приоритетом в моей грамматике, и у меня нет больше идей, чтобы ее исправить. Я пользуюсь жаворонком Вот в чем дело (я максимально упростил задачу): from lark import Lark parser = Lark(r""" start: set | set_mul set_mul: [nb] se…
05 апр '18 в 11:51
1 ответ

Ошибка разбора LARK для шестнадцатеричного числа

Я пытаюсь проанализировать шестнадцатеричное число с помощью: hex_number: "0x" HEXDIGIT+ и с 0xA в качестве ввода, и это всегда выдает мне ошибку, A является неожиданным токеном.
31 мар '18 в 03:40
0 ответов

Python: генерировать код Python из дерева

Я построил синтаксическое дерево, используя Lark Tree(if, [Tree(condition, [Token(VARIABLE, 'x'), Token(ACTION_OPERATOR, '>'), Token(SIGNED_NUMBER, '18')]), Tree(result, [Tree(if, [Tree(condition, [Token(VARIABLE, 'y'), Token(ACTION_OPERATOR, '&g…
03 апр '18 в 08:39
0 ответов

Python: создавать грамматику и реализовывать операторы

Я пытаюсь описать грамматику и операторы. Я использую следующий код from lark import Lark json_parser = Lark(r""" ?start: value ?value: dict | array | operator | string | SIGNED_NUMBER -> number | "true" -> true | "false" -> false | "null" …
27 мар '18 в 10:29
0 ответов

Python: создание DSL

Мне нужно решить какую-то специализированную задачу, связанную с созданием DSL для конкретных целей. Но у меня нет опыта с этим, и после некоторых исследований я выбираю Python Lark, Мне нужно понять, что-то вроде age1 = 20, age2 = 35; If age1 more …
26 мар '18 в 13:35
1 ответ

Python - Lark - грамматика - не может генерировать AST

В настоящее время я пытаюсь сгенерировать абстрактное синтаксическое дерево из функционального выражения, которое может быть, например: OR(FunctionOne("valueA", "valueB", "valueC"), FunctionTwo("valueD", "valueE", "valueF")) В основном это простая к…
18 окт '18 в 14:21
1 ответ

Как получить контрольный график программы?

Я хочу получить граф управления потоком кода / программы (будь то любой язык программирования и учитывая его грамматику). Я попытался использовать библиотеку lark в python для анализа базовой программы на C [я предоставил грамматику для базового син…
1 ответ

Lark, как описать серию необязательных токенов

Я анализирую файл в формате, который может включать в себя: INT32 price min 10 max 100 alertIfSold ; Токены min, max и alertIfSold являются необязательными и могут отображаться в любом порядке. То есть INT32 price max 100 alertIfSold ; INT32 price m…
05 июн '18 в 02:29
2 ответа

RecursionError: максимальная глубина рекурсии превышена при использовании lark в python

Я написал грамматику без кофеина, указанную в курсе cs143. Вот мой код import sys from lark import Lark, Transformer, v_args decaf_grammar = r""" start : PROGRAM PROGRAM : DECL+ DECL : VARIABLEDECL | FUNCTIONDECL | CLASSDECL | INTERFACEDECL VARIABLE…
2 ответа

DSL и многострочная документация с отступом от lark-parser

Я пытаюсь реализовать определение записи DSL с помощью жаворонка. Это основано на отступе, который делает вещи немного более сложными. Ларк - отличный инструмент, но я сталкиваюсь с некоторыми проблемами. Вот фрагмент DSL, который я реализую: record…
13 фев '19 в 11:23
1 ответ

Как сбалансировать правила и терминалы в парсере Python Lark?

Я использую Lark, отличную библиотеку разбора Python. Он предоставляет парсер Earley и LALR(1) и определяется через пользовательский EBNF формат. (EBNF расшифровывается как расширенная форма Бэкуса-Наура). Строчные определения - это правила, прописн…
16 фев '18 в 10:06
0 ответов

Понимание того, что составляет двусмысленность в грамматике жаворонка

Я пытался упростить случай, представленный в другом вопросе, и получил следующую попытку разбора с использованием lark: from lark.lark import Lark text = """ start_thing { loc int { from 0, to 1093, strand plus, id gi 384632836 } } """ grammar = """…
22 июн '18 в 13:56
2 ответа

Как исключить определенные возможности из регулярного выражения?

Для парсера, который я создаю, я использую это регулярное выражение в качестве определения идентификатора: ID: /[a-z_][a-z0-9]*/i (Для тех, кто не знаком с синтаксисом конкретного парсера, который я использую, флаг "i" просто означает без учета реги…
12 май '19 в 10:06
0 ответов

Грамматика парсера Lark работает с Эрли, но не с LALR

Рассмотрим этот простой тест парсера Python Lark: GRAMMAR = ''' start: container* container: string ":" "{" (container | attribute | attribute_value)* "}" attribute: attribute_name "=" (attribute_value | container) attribute_value: string ":" _value…
23 май '19 в 11:55
0 ответов

Разбор теста с множественным выбором с Lark

Я пытаюсь разобрать тест с несколькими вариантами ответов с помощью жаворонка, используя следующую грамматику. GRAMMAR = """ start: question choice~3..5 question: QUESTION_NUMBER _QUESTION_NUMBER_SEPARATOR question_body question_body: LINE+ QUESTION…
20 май '19 в 14:37