2011-03-27 110 views
0

我正在編寫一個簡單語言的編譯器。編程一個簡單的編譯器

我做了一個詞法分析器/標記器,它接收一個文件並在stdout中打印標記。

現在我想進行語法分析,但我不知道如何修改詞法分析器以便將令牌作爲輸入。

  • 鏈表是對大文件(源文件80MB左右約需RAM的1.3GB)
  • 我可以修改我的詞法分析器每次給下一個標記它被稱爲(理念取自效率極低龍書),但我不知道我會做什麼,如果在這個過程中的某個地方我必須回去閱讀以前的記號。

做這些事情的正確方法是什麼?

+1

什麼「簡單的語言」有80 MB的源文件? :-) – 2011-03-27 12:55:43

+0

那麼這是一個很好的問題。這是一種簡單的語言,但我想保持整潔,因爲這個項目可能會在未來成長。 – faulpin 2011-03-27 13:06:30

回答

0

,但我不如果一個地方在這個過程中,我必須回去看以前的令牌

這聽起來像你的比賽都太貪婪,我會做什麼。

你可能look into Backtracking

1

實現在詞法分析器一個nextToken()方法的標準方式。解析器調用此方法(或語法分析器),直到整個輸入被消耗完。

,但我不如果一個地方在這個過程中,我必須回去看以前的令牌

這不是通常情況下,我會做什麼。但是,解析器可能需要做的是將已經看到的令牌(或取決於解析器的前瞻的許多令牌)「推回」。在這種情況下,詞法分析器提供pushBack(Token),它確保下一次調用nextToken()將返回提供的令牌,而不是出現在輸入中的下一個令牌。