Grako (for grammar compiler) is a tool that takes grammars in a variation of EBNF as input, and outputs memoizing (Packrat) PEG parsers in Python.
1 ответ

Грако покинул рекурсию

Я пытаюсь использовать грако для описания простой леворекурсивной грамматики, но у меня проблемы с этим. Правая рекурсия работает без проблем: symbol = /[a-z]/ ; condition = symbol "AND" condition | symbol ; start = condition $ ; Согласно всем найде…
21 дек '16 в 11:15
1 ответ

Разбор одного или нескольких выражений с полезными ошибками

Я использую Grako (PEG-генератор парсера для Python) для анализа простого декларативного языка, где документ может содержать один или несколько протоколов. Первоначально у меня было корневое правило для документа, написанное как: document = {protoco…
05 окт '16 в 18:55
1 ответ

Игнорирование пустых элементов, соответствующих {} в рекурсивном правиле

Я хотел бы описать вложенное условие. Вот с чем я работаю: expr = ( /[_a-zA-Z][a-zA-Z0-9_-]*/ ) ; condop = ( "AND" | "OR" ) ; condition = expr { condop condition } ; start = condition ; Я могу сгенерировать AST с такими строками: foo AND bar Вот АСТ…
04 окт '16 в 15:44
1 ответ

Как обработать структурированный языковой файл в python

У меня есть большой структурированный языковой файл, как это: TASK SchM_Task { TYPE = AUTO; SCHEDULE = NON; PRIORITY = 160; ACTIVATION = 1; TIMING_PROTECTION = FALSE; AUTOSTART = FALSE; EVENT = SchM_Event; RESOURCE = SystemS_Resource; StackSize = 10…
1 ответ

Сгенерированный код не отступ

Я изменяю файл масла с помощью скрипта Python. Я написал грамматику EBNF для преобразования масляного файла в AST, используя Grako. И сгенерируйте файл масла обратно из AST, используя codegen, но файл Oil не имеет отступа (сгенерируйте в одной строк…
1 ответ

Как описать области применения в EBNF?

Я пытаюсь написать парсер для конфигураций Cisco IOS и ASA, используя Grako и Python. Я пытаюсь понять, как представлять ключевые слова с "областью видимости" в EBNF - например, ключевое слово "описание" должно появляться внутри interface сфера, но …
03 окт '16 в 14:22
1 ответ

Разбивая лексические элементы на части

Мой файл грамматики test.ebnf похоже, start = identifier ; identifier = /[a-z]*/ rest; rest = /[0-9]*/ ; Когда я запускаю эту грамматику во входных данных "test1234", я хочу, чтобы она выдавала "test1234" как одну лексему, но вместо этого AST выгляд…
03 янв '15 в 01:34
1 ответ

Grako - Как сделать обработку ошибок?

Как мне сделать обработку ошибок с Grako? EBNF (MyGrammar.ebnf): pattern = { tag | function }* ; tag = tag:( "%" name:id "%" ); function = function:("$" name:id "()" ); id = ?/([^\\%$,()=])+/? ; Я генерирую парсер с python -m grako --whitespace '' M…
14 фев '16 в 19:41
1 ответ

Разбор опций с PEG (Grako) не дотягивает?

Мой коллега PaulS спросил меня следующее: Я пишу парсер для существующего языка (SystemVerilog - стандарт IEEE), и в спецификации есть правило, похожее по структуре на следующее: cover_point = [[data_type] identifier ':' ] 'coverpoint' identifier ';…
06 июл '14 в 20:47
1 ответ

Ошибка ссылки при установке grako в Python

Я пытаюсь установить пакет Grako из PyPI, который, по-видимому, компилирует вещи с помощью Cython. Я не знаю, что означает этот процесс, и он прерывается неразрешенным символом. Может быть, кто-то может дать мне подсказку, что проверить, чтобы сдела…
06 июн '15 в 09:30
1 ответ

Грако конец закрытия, когда правило соответствует

У меня есть эта грамматика: name = /[_a-zA-Z][a-zA-Z0-9]*/; expression = name '+' name; def_body = 'def' name:name args:{name} body:expression; Но когда я пытаюсь разобрать, он всегда использует имя выражения как часть аргументов. Есть ли способ зас…
11 апр '15 в 10:35
2 ответа

Правило приоритета вопроса с грако

Я переделываю мини-язык, который я изначально построил на Perl (см. Chessa# на github), но у меня возникает ряд проблем, когда я применяю семантику. Вот грамматика: (* integers *) DEC = /([1-9][0-9]*|0+)/; int = /(0b[01]+|0o[0-7]+|0x[0-9a-fA-F]+)/ |…
24 сен '14 в 12:05
1 ответ

Обработка пробелов в грако при использовании регулярных выражений

Я пытаюсь написать грамматику ebnf со вкусом грако. Я заметил, что сгенерированный синтаксический анализатор, по-видимому, не перемещается по пробелам или комментариям при попытке проанализировать регулярное выражение. Документация говорит следующее…
27 ноя '16 в 13:18
1 ответ

Базовый пример Grako дает IndexError

Я хотел бы начать работу с Grako (3.6.6) и в качестве первого опыта работы с парсерами я хотел сгенерировать таблицу HTML из собственного синтаксиса. Следующий базовый тест import grako grammar = """table = { row }+ ; row = (cell1:cell "|" cell2:cel…
14 янв '16 в 11:05
1 ответ

Улучшение вывода ошибок сгенерированным Grako парсером

Я пытаюсь выяснить лучший подход к улучшению ошибок, отображаемых пользователю парсера, сгенерированного Grako. Кажется, что ошибки синтаксического анализа по умолчанию, отображаемые сгенерированным Grako синтаксическим анализатором, когда он сталки…
19 июл '16 в 20:57
1 ответ

Дополненное абстрактное синтаксическое дерево

Вот простая грамматика: START = DECL DECL $ ; DECL = TYPE NAME '=' VAL ; TYPE = 'int' | 'float' ; NAME = 'a' | 'b' ; VAL = '4' ; Я анализирую этот поток ввода с Grako: int a = 4 float b = 4 и я получаю это абстрактное синтаксическое дерево (JSON): […
01 мар '16 в 19:55
1 ответ

Как получить краткие сообщения об ошибках синтаксиса от grako/TatSu

Если вход в парсер, сгенерированный grako/tatsu, имеет синтаксическую ошибку, такую ​​как 3 + / 3 к примерам calc.py можно получить длинный список вызывающих последовательностей Python в дополнение к соответствующим 3 + / 3 ^ Я мог бы использовать t…
27 фев '18 в 09:46
1 ответ

Грако "код" генерация

Я пытаюсь понять, как можно воссоздать документ, проанализированный парсером, сгенерированным grako. Погрузившись глубоко в исходный код Grako, я думаю, что наконец понял, как можно вернуться из AST к сгенерированному документу. Может ли кто-нибудь …
22 фев '16 в 22:17
1 ответ

Как избежать вложенных объектов с помощью ModelBuilderSemantics в Grako

Если вы посмотрите на грамматику ниже, вы увидите основное правило, выражение, которое разбирается на более конкретные типы выражений. expression::Expression = or_ex:and_expr {'||' or_ex:and_expr}+ | andex:and_expr ; and_expr::AndExpression = and_ex…
10 окт '16 в 22:15
0 ответов

Теги grako ebnf на новой строке; Ингоринг пространства

Попытка сделать парсер с грако, чтобы разобрать что-то вроде tag1: line1 line 2 ... tag2: line1 line2 ... такие, что пробелы перед tag1 должны игнорироваться; но теги должны начинаться с новой строки. Малый ebnf (x.ebnf) START = DATA $; DATA = piece…
18 янв '15 в 13:45