【发布时间】: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(即添加缺少的
whitespace和changeVardefs)?顺便说一句,一旦我将它们添加到在线版本中,解析器就会运行良好。 -
完成。到目前为止,我还添加了一个指向我的工作的链接。它也可以帮助您尝试解决这个问题。感谢您的帮助!
标签: javascript pegjs