我正在編寫一個簡單語言的編譯器。編程一個簡單的編譯器
我做了一個詞法分析器/標記器,它接收一個文件並在stdout
中打印標記。
現在我想進行語法分析,但我不知道如何修改詞法分析器以便將令牌作爲輸入。
- 鏈表是對大文件(源文件80MB左右約需RAM的1.3GB)
- 我可以修改我的詞法分析器每次給下一個標記它被稱爲(理念取自效率極低龍書),但我不知道我會做什麼,如果在這個過程中的某個地方我必須回去閱讀以前的記號。
做這些事情的正確方法是什麼?
我正在編寫一個簡單語言的編譯器。編程一個簡單的編譯器
我做了一個詞法分析器/標記器,它接收一個文件並在stdout
中打印標記。
現在我想進行語法分析,但我不知道如何修改詞法分析器以便將令牌作爲輸入。
做這些事情的正確方法是什麼?
實現在詞法分析器一個nextToken()
方法的標準方式。解析器調用此方法(或語法分析器),直到整個輸入被消耗完。
,但我不如果一個地方在這個過程中,我必須回去看以前的令牌
這不是通常情況下,我會做什麼。但是,解析器可能需要做的是將已經看到的令牌(或取決於解析器的前瞻的許多令牌)「推回」。在這種情況下,詞法分析器提供pushBack(Token)
,它確保下一次調用nextToken()
將返回提供的令牌,而不是出現在輸入中的下一個令牌。
什麼「簡單的語言」有80 MB的源文件? :-) – 2011-03-27 12:55:43
那麼這是一個很好的問題。這是一種簡單的語言,但我想保持整潔,因爲這個項目可能會在未來成長。 – faulpin 2011-03-27 13:06:30