有没有简单的方法可以在没有成熟的lexer的情况下将字符串归为弦?
-
22-09-2019 - |
题
我正在寻找实施 分流码算法, ,但是我需要一些帮助,弄清楚将字符串分为令牌的最佳方法是什么。
如果您注意到,该算法的第一步是“读取一个令牌”。这并不是一件不平凡的事情。令牌可以由数字,运营商和帕伦斯组成。
如果您正在做类似的事情:
(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);
并恢复一个数组。
不隶属于 StackOverflow