2012-08-09 65 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