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, он выполняется в среде веб-страниц и работает без нареканий.