Генератор парсеров для JavaScript.
0 ответов

Как правильно использовать группы EBNF в Jison

Я пытаюсь выяснить, как справиться с ситуацией, возникающей при использовании расширения EBNF в Jison (Jison по умолчанию поддерживает только BNF - вы можете активировать эту опцию по мере необходимости). Я пытаюсь написать простой парсер XML. В XML…
09 дек '13 в 19:41
1 ответ

Объединить подобные конструкции в рекурсивных правилах

Это для парсера в Jison, но я думаю, то же самое относится и к Bison. У меня есть правило, которое имеет определение для выражения. expr : NUMBER -> { type: "number", value: $1 } | "(" expr ")" -> $2 | expr "+" expr -> { type: "+", left: $1…
29 июн '17 в 07:43
1 ответ

Определение грамматики jison приводит к неверному распознаванию токена

Недавно я нашел проект jison и изменил пример калькулятора с его сайта. ( http://zaach.github.io/jison/demos/calc/) /* lexical grammar */ %lex %% "a" return 'TOKEN1' "b" return 'TOKEN2' <<EOF>> return 'EOF' . return 'INVALID' /lex %start…
20 фев '15 в 21:13
2 ответа

Как получить абстрактное синтаксическое дерево (AST) из анализатора JISON?

Итак, я сгенерировал парсер через JISON: // mygenerator.js var Parser = require("jison").Parser; // a grammar in JSON var grammar = { "lex": { "rules": [ ["\\s+", "/* skip whitespace */"], ["[a-f0-9]+", "return 'HEX';"] ] }, "bnf": { "hex_strings" :…
11 дек '11 в 20:19
0 ответов

Что-то плохое с моей грамматикой

Я использую jison, и я видел документацию по грамматикам ebnf, но я не могу заставить мои грамматические работы работать: Вот изображения моей грамматики, ввода и ошибки. В ошибке грамматика распознает только одну строку, но kleen star должен распоз…
03 май '18 в 00:00
0 ответов

Контекстуальные условия при построении программы AST для C

Я пишу интерпретатор для C (подмножество) в Javascript (я хочу обеспечить визуализацию выполнения программы в браузере). В качестве первого шага я хочу создать дерево AST для пользовательской программы. Для этого я использую Jison, который похож на …
2 ответа

Является ли грамматика Гроффа LALR(1)?

Как домашний проект, я пытаюсь создать синтаксический анализатор groff с Jison (клон Bison на JavaScript), но я изо всех сил пытаюсь понять, является ли грамматика groff LALR(1). У кого-нибудь есть понимание этого? Заранее спасибо. Обновление 1 В от…
06 ноя '15 в 19:54
1 ответ

ДЖИЗОН: почему в регулярном выражении используется "." вместо \.?

Из примера на http://zaach.github.io/jison/docs/ [0-9]+("."[0-9]+)?\b return 'NUMBER'; почему в этом регулярном выражении используется "." вместо \.?
15 дек '13 в 16:13
1 ответ

Jison / Flex: Попытка перехватить что-нибудь (.*) Между двумя токенами, но возникли проблемы

В настоящее время я работаю над небольшим маленьким DSL, мало чем отличающимся от Rabl. Я борюсь с выполнением одного из моих правил. Прежде чем мы перейдем к проблеме, я немного объясню свой синтаксис / грамматику. На моем небольшом языке вы можете…
30 апр '14 в 22:33
1 ответ

Приоритет оператора Jison

Я разрабатываю язык с использованием Jison, и проблема, с которой я сталкиваюсь, заключается в приоритете операторов. Я хочу, чтобы операторы сравнения были первыми операторами, которые будут оценены, например, 1 + 2 < 3 - 3 * 4 станет (1+2) <…
15 дек '14 в 21:11
0 ответов

Jison: получить имя токена

Как получить доступ к имени токена "NUMBER"? | NUMBER {$$ = /* "NUMBER" */;} Я не мог найти ничего полезного console.log(yy),
29 ноя '14 в 00:34
1 ответ

JISON Recursion Для чтения всего входного текста после токена

Я очень плохо знаком с парсером /cfg или jison. Я хочу, чтобы моя грамматика: Читать все после токена АДРЕС к EOF Между "ADDRESS TO EOF" может быть несколько токенов ADDRESS (из шага 1) Мой пример ввода выглядит так: ...abc xyz address 101 My Street…
25 июл '16 в 12:13
1 ответ

Уменьшите / уменьшите конфликт в грамматике клика в jison

Я работаю над компилятором языка клик, используя пакет Jison. Я пошел очень хорошо, пока я не ввел классы, таким образом, Type может быть LITERAL сейчас. Вот упрощенная грамматика: %lex %% \s+ /* skip whitespace */ int return 'INTEGER' string return…
17 дек '15 в 12:50
1 ответ

Парсер Jison останавливается после первого правила

У меня есть простой формат файла, который я хочу проанализировать с помощью генератора разбора jison. Этот файл может состоять из нескольких выражений в произвольном порядке и количестве. Вот файл jison для парсера: /* lexical grammar */ %lex %% \s+…
27 ноя '15 в 05:52
1 ответ

Использование Jison для преобразования списка команд в массив объектов

Я пытаюсь использовать Jison, который является JS-портом Bison, генератором парсера. Моя цель - преобразовать этот вход: foo(10) bar() foo(28) baz(28) в это: [ { func: 'foo', arg: 10 }, { func: 'bar' }, { func: 'foo', arg: 28 }, { func: 'baz', arg: …
04 фев '18 в 20:03
1 ответ

Каковы строки%lex и /lex в jison?

Ниже приведен фрагмент кода: http://zaach.github.io/jison/demos/calc/, а также страница документации jison. После прочтения документации jison, lex и flex - я все еще не до конца понимаю синтаксис%lex и / lex. Это специфично для генератора сканера j…
13 май '14 в 04:16
1 ответ

Токены JISON, использующие одинаковые символы

У меня есть некоторые проблемы с использованием JISON. Я пытаюсь сопоставить 2 строки в квадратных скобках, разделенных точкой. Проблема, с которой я сталкиваюсь, заключается в том, что если любая из строк начинается с цифры или минуса, она обнаружи…
07 ноя '17 в 15:45
1 ответ

Как вы сопоставляете ноль или более жетонов в Jison?

Я пишу простой синтаксический анализатор выражений в Jison, позволяющий произвольному количеству новых строк следовать бинарному оператору в выражении. Это моя грамматика до сих пор: { "operators": [ ["left", "+", "-"], ["left", "*", "/", "%"] ], "b…
04 апр '13 в 04:12
2 ответа

Джейсон игнорирует одно из моих правил

Я пытаюсь использовать Jison. Вот моя грамматика: var grammar = { lex:{ rules:[ ["\\s+", ""], ["then", "return 'newline';"], ["goto", "return 'goto';"], ["http[^\\s]*", "return 'url';"], ["search", "return 'search';"], ["should_exist", "return 'exis…
23 фев '14 в 01:13
2 ответа

Как обнаружить новую линию в Jison?

У меня есть кусок кода Jison, который выглядит следующим образом: %lex %options flex %{ if (!('regions' in yy)) { yy.regions = []; } %} text [a-zA-Z][a-zA-Z0-9]* %% \s+ /* skip whitespace */ \n+ return 'NL'; "," return ','; "-" return '-'; "[" retur…
31 май '16 в 16:03