【问题标题】:PEG.js: how to use prompt?PEG.js:如何使用提示?
【发布时间】:2014-05-13 08:17:11
【问题描述】:

我正在使用 PEG.js 创建一个 C++ 解析器,并且我需要能够使用 cin。对于匹配后的 JS,当我使用 prompt() 时,(备用)online version 会引发错误“解析错误:提示未定义”。我正在尝试使用初始化程序来创建一个复制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;

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

另外,这里是main piece of code,提供任何人需要的所有(当前)额外信息。我也遇到了一些问题,但在发布另一个问题之前,我会尝试自己解决这些问题。

【问题讨论】:

  • 为什么需要使用 prompt解析 字符串cin?不知道你在这里做什么。
  • 有人删除了正确的 PEG.js 格式。最后一行应该包含在{} 中,如果std::cin >> [a-zA-Z_] 匹配,则使其在其中执行JS。不是为了解析,而是为了在找到上面提到的字符串时实际采取行动。另外,以防您感到困惑,changeVar 只是一个在不更改变量类型的情况下更改变量值的函数。
  • 我误解了 PEG.js 的工作原理,显然它不仅是解析器,还是解释器。我已经回滚了对语法的更改。
  • 能否请您扩展规则以创建SSCCE(即添加缺少的whitespacechangeVar defs)?顺便说一句,一旦我将它们添加到在线版本中,解析器就会运行良好。
  • 完成。到目前为止,我还添加了一个指向我的工作的链接。它也可以帮助您尝试解决这个问题。感谢您的帮助!

标签: javascript pegjs


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2021-03-31
    相关资源
    最近更新 更多