Описание тега grako
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…
26 фев '15 в 15:35
1
ответ
Сгенерированный код не отступ
Я изменяю файл масла с помощью скрипта Python. Я написал грамматику EBNF для преобразования масляного файла в AST, используя Grako. И сгенерируйте файл масла обратно из AST, используя codegen, но файл Oil не имеет отступа (сгенерируйте в одной строк…
12 мар '15 в 09:24
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