【发布时间】:2016-03-25 11:27:39
【问题描述】:
我想用 JavaScript/Node 编写一个简单的解释器。在生成令牌时遇到了障碍。
var code = 'if (a > 2 && b<4) c = 10;';
code.match(/\W+/g)
// [" (", " > ", " && ", "<", ") ", ";"]
code.match(/\w+/g)
// ["if", "a", "2", "b", "4", "elo"]
如图所示,W+ 让我获取特殊字符,w+ 让我获取单词。我想知道如何将它们放在一个数组中,如下所示:
// ["if", "(", "a", ">", "2", "&&", "b", "<", "4", ")", "c", "=", "10", ";"]
【问题讨论】:
-
\W+非常幼稚,考虑(!a+-1),/\w+|\W+/将生成(! , a , +-, 1, ),而正确的标记是(, !, a, +, -1, ) -
你不能用正则表达式解析 JS。它没有必要的解析能力。
-
@torazaburo 你能提出更好的建议吗?
-
是的,使用解析算法编写一个实际的解析器。除非您将此作为练习,否则最好从几个现有的 JS 解析器之一开始,例如 esprima。
标签: javascript regex compiler-construction