2010-06-29 88 views

回答

2

像這樣的嵌套上下文最好用堆棧表達,但是你可以通過計算來做這種解析的便宜版本 - 它不是真正的「正確」,因爲它不是完整的解析器(一方面,這沒有考慮到註釋,並且可能有其他方式可能會中斷,如包含括號的名稱),但足夠用於一次性:

psuedocode

int indent=0; 
for (line): 
    print ('\t' for each indent) + line 
    if (line.contains('{'))indent++ 
    if (line.contains('}')} indent --; 

如果行尚未在括號內,因爲你的樣本輸出顯示打破,打破對紐林輸入迭代線es,'{'或'}'。

0

我想這個問題有各種解決方案。根據需求做出迴應,您可能需要一個優化的解決方案,它可以讓您輕鬆完成最終輸出的模板。然後,您需要了解graphviz文件格式,並可能將代碼按塊標識爲節點。然後這個工作很簡單:輸入節點(我的意思是代表節點)代表深度爲i的indents = i * 4空格。

因爲我沒有關於graphviz文件的知識,所以我很可能會簡單地將它視爲純文本文件。 因此,所有你需要做的是

1. open the graph file, 
    2. create a temp file for the final output 
    3. set indent = 0. 
    4. read one line, if not null, search the line for braces, for every opening brace, ++indent 
    and --indent for every closing brace. 
    NOTE:you need to escape the escaped braces if there is any. say "{" or \{ 


    5. write the line to the temp file with preceding spaces = 4*indent (assuming you want 4 spaces for every indent) 
    6. close both files. if needed, replace the old file with the temp file. 

正如我可能不正確地理解你的equestion,僞代碼可能是沒用的functionwise。但你有這個想法;-)