2011-10-11 179 views
1

好吧,我在C#中編寫了一種語言編譯器,它將我的語言轉換爲MSIL,然後調用MSIL編譯器。但那不是重點。我創建了一些代碼來顯示你想我會與合作:字符串搜索

module myApplication 

    [EntryPoint] 
    function void start 
    write("Hello World!\n") 
    wait(5) // wait 5 seconds 
    ret() 
    endfunction 
endModule 

好吧,我試圖通過代碼進行掃描並找到「[入口點]」就是,然後找到所有的「之後的函數void start「。所以我可以找到函數類型(「void」)和名稱(「start」)。 [EntryPoint]標籤將始終位於將被定義爲應用程序入口點的函數之上。我將不得不修剪空白和東西。這也是通過使用'\ n'掃描,所以函數必須在標籤下。

而且我還有另一個問題,我將如何使函數內部的代碼與「function void start」和「endfunction」分開?

+1

你不應該在這裏使用字符串搜索,而是一個語言解析器 –

+2

這聽起來像你真的需要閱讀解析器的結構。關於解析器有很多需要解決的問題,這對Stack Overflow的回答並不適用。 –

+0

好的。我會研究它。謝謝。 – tr0yspradling

回答

3

有一個很多更多的編寫編譯器比簡單的字符串操作 - 例如,如果你的源代碼而不是這個樣子:

module myApplication 
    string myString = "[EntryPoint] 
    function void start 
    write("Hello World!\n") 
    wait(5) // wait 5 seconds 
    ret() 
    endfunction" 
endModule 

即你的源代碼定義了一個包含程序源代碼的字符串 - 你不能只看看一個看起來像入口點的東西,你需要真正解析你的源代碼。

請參閱Learning to write a compiler以獲取入門資源。