2013-01-20 45 views
2

我想從頭開始爲python編寫一個詞法分析器。但我不知道在哪裏以及如何開始。對於初學者,我想假設我們將Python程序作爲一組傳遞給分析器的字符串。分析器應該確定新行的位置以及要查看的適當空白。如何找出python源代碼中的新行?我已經閱讀了python的詞彙規範,我們可以使用基於堆棧的方法來解決使用空格的縮進問題,但無法計算如何查看。它只是使用'\ n'進行正則表達式檢查,還是有算法方式來確定這一點?如何從頭開始編寫詞法分析器?

我故意不想使用像lex,yacc或flex這樣的東西。

+1

你似乎迷失在你想達到的目標中。您可能會想要使用詞法分析器中的令牌進行解析,但是您從未提及與令牌相關的任何內容。你似乎沒有意識到基本的字符每字符閱讀等。我認真地推薦閱讀,至少相關章節,「編譯器:原理,技術和工具」一書(通常稱爲龍的書,因爲它的封面上有很好的龍)。 – mmgp

+0

你看過Python自己的詞法分析器嗎,[在'tokenizer.c'](http://hg.python.org/cpython/file/575eb20cd7d1/Parser/tokenizer.c)? –

+0

龍書是古代(1977年),但絕對值得一讀。當我在80年代從事語言開發時,這是一個標準參考。 –

回答

1

我最近開發了一個用於查找SQL語句的解析器。我知道規則是不同的,但方法可能相似。我用python來開發解析器。第一步是找到令牌的開始的正則表達式。然後,我將該列表傳遞給確定令牌所表示的有限狀態機。

規則需要考慮換行符,分號和字符串以及可以跨越行的註釋等內容。在python中,你會更關注換行和縮進。

一旦你能夠解析出單個語句,那麼你應該將它們傳遞給一個可以解析語句的函數,它可能會採用類似的方法。

您可以在https://github.com/PeterWooster/SQL-Tools/blob/master/SQLStatements.py找到SQL分析器這說明了查找令牌並使用FSM處理它們的方法。是的,它處理跨越換行符的字符串。

相關問題