0

我正在使用 PEG.js 创建一个 C++ 解析器,并且我需要能够使用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;

谢谢你的关注。我试过用谷歌搜索这个和搜索这个,但我没有找到任何结果。

此外,这里是主要代码段,用于任何人需要的所有(当前)额外信息。我对此也有一些问题,但在发布另一个问题之前,我会尝试自己解决这些问题。

4

1 回答 1

0

如果您使用的是http://peg.arcanis.fr/,则解析器代码在Web Worker内部执行- 它无法访问任何 UI,例如windowDOM 或 DOM。错误“ undefined variable”字面意思是没有windowprompt声明。

如果您将代码粘贴到http://pegjs.majda.cz/online,它会在网页环境中执行并且可以完美运行。

于 2014-05-13T00:17:11.130 回答