我正在寻找实施 分流码算法, ,但是我需要一些帮助,弄清楚将字符串分为令牌的最佳方法是什么。

如果您注意到,该算法的第一步是“读取一个令牌”。这并不是一件不平凡的事情。令牌可以由数字,运营商和帕伦斯组成。

如果您正在做类似的事情:

(5+1)

一个简单的string.split()会给我一个令牌{(“,” 5“,”,“+”,“ 1”,“)”}的数组。

但是,如果您的数字有多个数字,例如:

((2048*124) + 42)

现在一个幼稚的字符串。split()将无法做到。多位数数字是一个问题。

我知道我可以写一个Lexer,但是有没有办法在不编写成熟的Lexer的情况下做到这一点?

我正在用JavaScript实现此功能,并且希望尽可能避免沿着Lexer-Path下去。我将与整数一起使用“*”,“+”,“” - 和“操作员。

有帮助吗?

解决方案

正则表达式如何?您可以轻松地编写正则表达式以按所需的方式将其拆分,而JS字符串也可以接受正则拨号作为参数。

例如...(修改以包含您需要的所有字符等)

/([0-9]+|[*+-\/()])/

其他提示

您可以使用如上所述的全局匹配 http://mikesamuel.blogspot.com/2009/05/felficed-parsing-in-in-javascript.html

基本上,您创建一个描述令牌的正则

/[0-9]+|false|true|\(|\)/g

并将“ g”放在末尾,因此它在全球范围内匹配,然后您调用其匹配方法

var tokens = myRegex.match(inputString);

并恢复一个数组。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top