2009-11-06 43 views
0

我將開始開發自己的文檔格式(如PDF,XPS,DOC,RTF ...),但我想知道我可以在哪裏閱讀一些教程,到是......?我不想要代碼,這是一個我想學習如何構建它的項目,而不是使用其他人的經驗。構建文檔格式解釋器

PS:我想讓它像一個XML文件:

[Command Argument="Define it" Argument2="Something"] 

這就像PDF,但是這句法將通過一個程序,我將使用C#構建它,就像HTML和瀏覽器解釋;)

請記住,我的問題是關於將解釋該代碼的程序,但它是一個好的開始解釋XML代碼的教程;)

+0

你真的希望有教程重新發明輪子? – 2009-11-06 20:59:48

+0

不,但我想學習我自己,不要在這裏使用某個用戶的代碼,也不要學習任何東西。 – 2009-11-06 21:01:04

回答

1

聽起來像一個很好的學習項目,你已經有了一些好的指針。我只想補充一點,你應該記住文檔文件語言和文檔格式之間是有區別的。

考慮OOXML,它是建立在XML之上的文檔格式(我稱之爲文件語言)。如果您的目的是瞭解如何構建自己的文檔格式,那麼我強烈建議從XML開始,這樣就不必重新創建語言分析器。這將讓您專注於構建格式的問題。

也就是說,如果你想要創造自己的語言,那麼對你很好;只是想確保你意識到他們是不同的野獸。

這裏有一些鏈接,這將有助於您使用C#XML上手:

+0

+1謝謝;)非常好的答案! – 2009-11-06 21:58:50

+0

但是您可以添加一些鏈接到XML代碼解釋教程嗎? – 2009-11-06 23:03:02

2

我很困惑,你問什麼,但如果你需要你自己的格式一個XML文件,爲什麼不只是使用來描述XML格式?

編輯:好吧,我想我現在明白了。如果你爲了樂趣和學習而學習(這很棒),那麼需要採取很多方法。實際上,它可能更好不是做任何研究,嘗試自己想出一個解決方案,看看它是否工作,你需要做些什麼來使其更好,等等。

+0

我要構建一些類似於PDF的東西,但它的語法就像XML一樣,我將構建一個讀取該語法並解釋它的程序,就像HTML和瀏覽器一樣。 – 2009-11-06 20:59:01

+0

你不需要。如果您的格式是有效的XML,則可以使用現有工具爲您解析。那麼你所要做的就是解讀這些信息。 – 2009-11-06 21:04:50

+0

問題是我想構建一個這樣的語法,但事情就是解釋它的程序。 – 2009-11-06 21:06:24

3

我假設你爲了學習如何去做這件事。如果是這樣,這是一個有價值的冒險,我明白。

你會想通過學習LL語法分析器和語法開始。這將幫助您將從文件讀取的文檔解釋爲文檔對象模型(DOM)。從那裏你可以創建例程來操作或渲染文檔樹。

祝你好運!

+0

+1非常好的答案! – 2009-11-06 21:33:09

+0

好的答案,有一個建議。如果Nathan比流解析更感興趣學習文檔樹,他可以使用正則表達式快速解析流。 – 2009-11-06 22:07:07

+1

也許我做錯了,但正則表達式似乎是1)神奇,2)效率低下,3)難以證明。但嚴重的是,我可能只是做錯了,也許正則表達式是一個非常乾淨的解決方案。但是,我認爲LL解析器是一個很好學習的東西。 – 2009-11-06 22:30:18

1

遠離我,爲了學習新事物,不要再重新發明輪子。好好考慮一下。但是,如果您要提出有關如何操作的問題,則需要再指定一些問題。
你尋求幫助的:

  • 設計的框架/格式
  • 規劃你的時間/估算期限
  • 與XML
  • 用C#
  • 構建一個基於web的C#工作工作應用程序
  • 構建基於PC的C#應用​​程序
  • 其他方面的開發完全是

有很多人在這裏誰想要幫助 - 但最好的答案給予關注的問題

+0

在C#中構建我自己的文檔類型(在問題中指定)的解釋器。 – 2009-11-06 21:25:31

1

有幾個方法可以解決這個(不一定是具體的,但始終專注)。一種方法是首先定義文件的格式,然後使用解析器生成器來打包可以讀取該格式的C#代碼。在「c#解析器生成器」上執行Google搜索將會獲得您可以使用的許多不同庫的鏈接。

或者,您可以編寫自己的解析器,從頭開始。這將比使用解析器生成工具更有用,但最終可能更具教育意義。

對於簡單的格式,define-a-grammar方法可能是總的矯枉過正。解決這個問題的另一種方法是設計將首先在應用程序中使用的對象樹,然後編寫序列化和反序列化例程以保存和加載文件中的內容。 C#中的序列化接口非常靈活,您可以輕鬆地序列化爲二進制文件或XML文件。

認爲應該是相對簡單的創建自己的序列化格式創建你喜歡的一個文件,但MSDN是不是被今天我的朋友,所以我無法找到相關的文檔。