PEG.js: как использовать подсказку?

Я создаю синтаксический анализатор C++ с PEG.js, и мне нужно иметь возможность использовать cin, С JS после матча, когда я использую prompt()(альтернативная) онлайн-версия выдает ошибку "Ошибка разбора: приглашение не определено". Я пытаюсь использовать инициализатор для создания функции для репликации prompt (вероятно, не оптимизирован, я просто пытался это как решение). Однако, когда я делаю это, это все равно дает мне ошибку. Я пытался использовать window.prompt как хорошо, но опять же, это не работает. Вот пример того, что я делаю:

{
    function cin() {
        window.prompt("");
    }

    function changeVar(variable, newValue) {
        if(typeof variable === typeof newValue) {
            variable = newValue;
        } else if(typeof variable === 'undefined') {
            alert("You can't assign a value to a variable if the variable isn't declared yet!");
        } else {
            alert("Bad assignment. In C++, a variable *must* have the same type *all the time*.");
        }
    }
}

stdin =
    whitespace* "std::cin" whitespace* ">>" whitespace* varToBeChanged:[a-zA-Z_]+ ";" whitespace*
        { changeVar(varToBeChanged, cin('')); return varToBeChanged; }

whitespace =
    space:[ \t]
        { return space; }

а затем в поле тестирования парсера:

std::cin >> variable;

Спасибо за поиск. Я пробовал поискать в Google и SO-поиск, но я не нашел никаких результатов.

Кроме того, вот основной фрагмент кода для всей (текущей) дополнительной информации, которая нужна каждому. У меня также есть некоторые проблемы с этим, но я постараюсь выяснить их самостоятельно, прежде чем отправлять другой вопрос.

1 ответ

Решение

Если вы используете http://peg.arcanis.fr/, то код синтаксического анализатора выполняется внутри Web Worker, который не имеет доступа к любому пользовательскому интерфейсу, например window или ДОМ. Ошибка "undefined variableозначает буквально, что нет window или же prompt объявлен.

Если вы вставляете свой код в http://pegjs.majda.cz/online, он выполняется в среде веб-страниц и работает без нареканий.

Другие вопросы по тегам