将`(,),||,&&,|`分隔的unix语句分开

时间:2012-08-09 12:35:37

标签: algorithm parsing language-agnostic

我有一个带有几个unix语句的字符串,与(, ), ||, &&, |一起加入。我想按照它们在unix命令行中评估的顺序将它们分成数组(嵌套?)。我最好希望它们以前缀表示法,但任何事情都可以。

a --foo "b|a||r" && a -b || (a || a) | c | d

应该成为

["|", ["|", ["||", ["&&", "a --foo \"b|a||r\"", "a -b"], ["||", "a", "a"]], "c"], "d"]

(真的试图给出一个涉及所有可能性的例子。

我该如何处理?

我可以理解大多数流行的高级(OOP)语言(ruby,python等)中的代码,甚至伪代码都可以帮助。

1 个答案:

答案 0 :(得分:0)

如果您考虑一下,该任务与解析数学表达式没有什么不同,例如: a * (b + c) / d ==> [/, [*, a, [+, b, c]], d]。因此,您可以使用相同的工具:

您需要的是中缀解析器

Infix ,因为您的运算符在操作数之间:例如a && b

浏览Wikipedia article了解一些理论背景,然后获取您想要使用的语言的现有解析器,并定义运算符及其优先级。