我希望我的語言有兩個功能,使蟒蛇般的壓痕Python
這樣一個很好的格式化語言:如何做彎曲/野牛
- 每行一個聲明
- 塊與另一縮進級別開始並繼續下去,直到結束
任何人都可以給我一個關於如何實現與flex/bison
類似的工具,如何實現該提示?這種功能強制用戶編寫可讀代碼。
我希望我的語言有兩個功能,使蟒蛇般的壓痕Python
這樣一個很好的格式化語言:如何做彎曲/野牛
任何人都可以給我一個關於如何實現與flex/bison
類似的工具,如何實現該提示?這種功能強制用戶編寫可讀代碼。
我認爲沒有辦法只用lex/yacc來製作一個python-like語法分析器,因爲lex/yacc只能處理上下文無關文法,但是python-like語法是上下文敏感的。
的原因是,如果你想找到一個聲明,前一個是同一塊,你應該讓這種說法知道前一個缺口,那就是環境。
我建議你除了法/ yacc的一些額外的邏輯來實現這一點,而不會那麼辛苦了。您可以在「語法」模塊中閱讀代碼here。
的關鍵是,讓法/ yacc的部分解析單個語句,與縮進級別,並且寫的東西包裝陳述成塊。
您可以嘗試跟蹤詞法分析器縮進級別,並添加僞令牌縮進和取消縮進。您需要保留已經看到的縮進級別堆棧,並且需要關注空白/僅限註釋的行。但我擔心,詞法分析器最終會變成一個難以維護的混亂,並且在詞法分析器中還有一些特定於語法分析的狀態(縮進堆棧)。
可惜我只能標記一個作爲答案。謝謝,您的意見對我有很大的幫助。 – Lanbo 2011-05-14 06:47:00
馬特也許寫了一篇關於獨立解析器的文章,與使用「unput」處理顯著空白的方式:
http://matt.might.net/articles/standalone-lexers-with-lex/
(這個例子是中途下頁)
說,用Haskell的'Parsec'這樣做會更容易嗎?我聽說它不僅僅是上下文無關的。 – Lanbo 2011-05-17 17:04:26