2012-08-09 58 views
1

分隔的unix语句我有一个包含几个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,等等),甚至伪码都会有所帮助。

回答

0

如果你仔细想想,这个任务与解析数学表达式(例如, a * (b + c)/d ==>[/, [*, a, [+, b, c]], d]。因此,您可以使用相同的工具:

您需要的是一个中缀语法分析器

,因为你的运营商之间的操作数:如a && b

浏览过Wikipedia article了一点理论背景,然后抓住你想使用的语言现有的解析器并定义运算符及其优先级。

+0

我不认为这将能够解析'猫“a && b”|回声'正确? – user1527166 2012-08-09 12:42:27

+0

@ user1527166:这应该在*标记化*步骤中处理,即将字符串拆分为简单单元时:'''之间的东西应该完全标记为字符串。 – Heinzi 2012-08-09 12:43:30

+0

嗯,还有一件事情在我尝试之前,它可以处理'猫'一个\“B \”“'?(即,\”将转义一个引号,而不是结束字符串)。 – user1527166 2012-08-09 12:48:54