compiler-theory

    0熱度

    1回答

    我想將一種簡單的編程語言翻譯成另一種編程語言。我只需要輸出在語法上是有效的,因此代碼生成部分可以放棄。 說,Python的一個子集到C.我覺得我可以欺騙一下,只是「複製粘貼」大部分代碼,但是說我想將Python的列表/字符串拼接轉換爲C,然後它變得不平凡(對我來說,此刻)。 我一直到自頂向下的遞歸下降解析器(實際語法未決)。接下來我該做什麼?我有一本龍書(第二版),但是在我現在所在的位置之前瀏覽,

    0熱度

    1回答

    說我有: S -> A A -> B C A a | ϵ B -> k | ϵ C -> m 現在在初始狀態S' -> S,我要去包括: S' -> .S 則S關閉: A -> .B C A a,A -> . 顯然,關閉還包括B -> .k和B -> .。 但是由於B→ε是一種產品,我是否還必須在初始狀態中包含C -> ,m?由於在A -> B C A a中,B可以是ε。 我只是想知道我

    0熱度

    2回答

    您可以通過左分解消除模糊性嗎? 例如,懸掛其他。 還是左保留只消除左遞歸? 謝謝。

    1熱度

    1回答

    我有一些麻煩,在理解了編譯階段不同的錯誤之間的差異,比如這個程序: int main() { int x = 5; int x = 6; } 我的猜測是,這將無法在語義分析階段,但我不某些(是否有可能在詞法分析階段失敗,因爲會生成(int x)的重複標記?) 感謝您的幫助。

    3熱度

    1回答

    在閱讀Guido's reasoning for not adding tail recursion elimination to Python,我炮製在Haskell幾乎尾遞歸的這個例子: triangle :: Int -> Int triangle 0 = 0 triangle x = x + triangle (x - 1) 這當然不是一個尾調用,因爲雖然遞歸呼叫本身處於「返回」狀

    0熱度

    1回答

    我似乎無法找到等價的LR語法: S→aSbS | bSaS | ε 其中我認爲識別字符串與'b'相同的數字比'b'。 這將是一個解決方法?是否有可能找到和LR語法呢? 在此先感謝! 編輯: 我發現什麼,我認爲是等效的語法,但我一直沒能證明這一點。 我想我需要證明原語法生成上面的語言,然後證明語言是爲以下等價語法生成的。但我不知道該怎麼做。我應該怎麼做? S→aBS | bAS | ε B→b |

    2熱度

    2回答

    我正在研究一些計算理論,正如所暗示的那樣,這是非常理論的。 我可以很容易地從正則表達式轉換爲NFA到DFA,我可以理解。 但是由於所有的NFA都可以轉換爲DFA(我敢肯定)在UNIX中的grep命令使用正則表達式來確定匹配的字符串,最常用的有限自動機,DFA或NFA是什麼?根據我的經驗(不是很多),DFA在表示常規語言時通常要簡單得多,而且也是確定性的,因此應該總是選擇超過NFA。 NFA分支到多

    4熱度

    3回答

    有時,程序的控制流中訪問的變量的值不可能對其輸出產生任何影響。例如: global var_1 global var_2 start program hello(var_3, var_4) if (var_2 < 0) then save-log-to-disk (var_1, var_3, var_4) end-if return ("Hello

    1熱度

    2回答

    試想一下,我們有一個被賦予了一個Excel電子表格有三列,標記COND,X和Y COND = TRUE or FALSE (user input) X = if(COND == TRUE) then 0 else Y Y = if(COND == TRUE) then X else 1; 這些公式計算在Excel中完全正常,而Excel不生成循環依賴項錯誤。 我正在寫一個編譯器,試圖將這些

    1熱度

    2回答

    我正在編寫一個Java編譯器作爲一個娛樂項目。但是,我注意到,當我們在命令行中編譯文件時,例如「gcc example.c」,編譯器能夠在終端的工作目錄中找到example.c而沒有錯誤。編譯器如何知道搜索example.c的目錄? OS是否在編譯器的目錄中找到example.c?另外,我怎樣才能在我的C程序中模擬這個動作,以便用戶可以通過調用我的編譯器,例如「compiler example.j