我正在用它自己的內置語言編寫一個類似於Python的工具。我想在語法中使縮進有意義(因此在行首的製表符和空格代表命令的嵌套)。如何在語法中使用類似Python的縮進來編寫語言?
這樣做的最好方法是什麼?
我寫過遞歸下降和有限自動機解析器。
我正在用它自己的內置語言編寫一個類似於Python的工具。我想在語法中使縮進有意義(因此在行首的製表符和空格代表命令的嵌套)。如何在語法中使用類似Python的縮進來編寫語言?
這樣做的最好方法是什麼?
我寫過遞歸下降和有限自動機解析器。
使用一種叫做ASDL產生的電流CPython的解析器seems to be。
關於你使用特殊的詞法要求,it's done壓痕令牌稱爲INDENT
和DEDENT
。要複製這些內容,只需在詞法分析器中實現這些標記(如果使用堆棧來存儲先前縮進行的起始列,那麼這些標記非常容易),然後像往常一樣將它們插入語法中(就像任何其他關鍵字或運算符標記一樣) 。
這很好......但我只想確定自己寫的正確技巧。 – 2013-03-20 19:27:33
@oleg,請參閱上面鏈接的python文檔。他們使用兩個特殊的令牌INDENT和DEDENT。 – ulidtko 2013-03-20 19:30:31
hm ...這是有道理的。我的壞我沒有想到它第一次:) – 2013-03-20 19:30:54
這不是關於python ...這是關於python語法的。它與它相似。命令不在python中。只是人類可讀的語言...... – 2013-03-20 19:18:32
我建議ANTLR任何詞法分析器/解析器代(http://www.antlr.org)。
此外,該網站(http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/)有一些更多的信息,特別是:
Python的縮進不能用DFA來解決。 (我仍然困惑於它是否可以用上下文無關的語法來解決)。
PyPy產生約詞法的Python有趣的訊息(他們打算它使用後處理詞法分析器輸出來解決)
CPython的的標記生成器被寫入C.它的Ad-Hoc,手寫,和 複雜。這是我知道的 Python lexing的唯一官方實現。
前段時間我寫了一個簡單的C語言實現的解析器,它是遞歸下降解析器。我不需要複雜。它大約有30個命令。 – 2013-03-20 19:21:26
我建議你改變這個問題的標題,這是從列表頁面非常誤導。也許提起'off-side rule' – forivall 2013-03-20 19:30:19
@forvall完成! :) – 2013-03-20 19:32:33
目前的標題呢?我認爲它好多了! :) – ulidtko 2013-03-20 19:38:06