我做一些簡單的RTF文本解析,我需要糾正的國際空間站。鑑於以下字符串:字符串轉換爲樹表示與規則
{aaaaaaa\}aaaa\{aaaaa{bbbbbbbb{ccccc\{cccc}bbb{eeeee}{{gggg}ffff}bbbbbb}aaaaa}
其中:
\ means ignore next character
{ means expand
} means collapse up to parent
在字符串中的任何點的狀態可能會被除了在封閉的標籤字符的任意一個字符的影響。例如{} GGGG不會FFFF但AAAAAAA} AAA影響..會影響bbbb, ccc, eee, ggg, fff
等。
由此我們可以分割上述只是有意義塊
A1 = aaaaaaa\}aaaa\{aaaaa
B1 = bbbbbbbb
C = ccccc\{cccc
B2 = bbb
E = eeeee
G = gggg
F = ffff
B3 = bbbbbb
A2 = aaaaa
產量:
{A1{B1{C}B2{E}{{G}F}B3}A2}
爲了描述我使用的依賴性X> Y也就是說,Y取決於X(如在X可以改變Y的意思)
A1
A1 > B1
A1 > B1 > C
A1 > B1 > B2
A1 > B1 > B2 > E
A1 > B1 > B2 > G
A1 > B1 > B2 > F
A1 > B1 > B2 > B3
A1 > B1 > B2 > A2
A1 > A2
因此,如果我們再有,可以有一個值和有序的節點子值列表。這樣的價值樹是這樣的:
A1
- B1
- - C
- - B2
- - - E
- - - G
- - - F
- - - B3
- A2
然後得到那個影響任何節點的角色,我可以通過每個家長加緊遞歸。
我一直陷在試圖分析字符串到我的節點類什麼:
public class myNode
{
public myNode Parent;
public string Value;
public List<myNode> subNodes;
}
我讀通過字符串字符,當我遇到一個\
我被兩個遞增。當我遇到一個{
我保存以前的文本部分爲節點的值,並進入孩子,當我遇到一個}
我下臺。
,但我一直搞亂了的邏輯,特別是對G
和A2
。在紙上做這件事很簡單,但是當我嘗試不得不做下臺的實際邏輯時,我總是把它搞亂。
有沒有使這個結構更加簡單的方法是什麼? (或者我應該使用更好的結構)。我認爲應該有一些庫允許將字符串轉換爲樹,但我似乎無法找到任何。
http://www.antlr.org/ ..它應該能夠解析你的結構...雖然 –
可能是這個項目的矯枉過正如果我是正確的,你的問題可以用AST http:///en.wikipedia.org/wiki/Abstract_syntax_tree ..如果是這樣,你可以使用任何你喜歡的ast語法分析器/解析器生成器。我相信他們生成的表格有助於更快的解析...完全忘記了表格被稱爲 –
好問題描述。我冒昧地編輯了標題,因爲它實際上並不是你需要的二叉樹。 –