Можно ли программно установить состояние анализатора Jison в вашем коде JS? - PullRequest
0 голосов
/ 05 февраля 2020

Я пишу скрипт в JS, который использует Jison (https://zaa.ch/jison/) в качестве генератора синтаксического анализатора; Я не смог найти в его документах ничего похожего на следующее:

// index.js - the script using the jison parser 

let myParser = require('/path/to/parser').parser; 

// some logic here to determine what the state should be 

myParser.setState('someState');
myParser.parser('someInput'); 
myParser.popState(); 

// etc.

У меня есть логи c, которые очищают ответы от сервера и определяют некоторую информацию об этом выводе перед отправкой мой парсер Можно ли установить состояние моего анализатора вне самого файла .jison?

Спасибо!


Редактировать: добавив дополнительную информацию ниже:

Я заметил в коде, сгенерированном Jison, функцию / объект парсера экспортируемый имеет поле lexer. У лексера есть методы pushState() и popState(). Я пытался вызвать это, но я получаю следующую ошибку:

Пример:

let myParser = require('/path/to/parser').parser; 

myParser.lexer.pushState('someState');
myParser.parse('someInput');
myParser.lexer.popState();

Выход:

node index.js
C:\path\to\my\script\TheParser.js:608
        this.conditionStack.push(condition);
                            ^

TypeError: Cannot read property 'push' of undefined

1 Ответ

1 голос
/ 06 февраля 2020

Вы не можете использовать begin / pushState до инициализации лексера, что происходит при вызове его метода setInput. Полагаю, вы могли бы вызвать этот метод самостоятельно, хотя парсер вызовет его снова независимо от этого.

...