Python に似た独自の組み込み言語を使用してツールを作成しています。構文でインデントを意味のあるものにしたい (行頭のタブとスペースがコマンドのネストを表すようにするため)。
これを行う最善の方法は何ですか?
私は以前に再帰降下と有限オートマトンのパーサーを書いたことがあります。
Python に似た独自の組み込み言語を使用してツールを作成しています。構文でインデントを意味のあるものにしたい (行頭のタブとスペースがコマンドのネストを表すようにするため)。
これを行う最善の方法は何ですか?
私は以前に再帰降下と有限オートマトンのパーサーを書いたことがあります。
Pythonコンパイラ、特にをチェックしてくださいcompiler.parse
。
レクサー/パーサーの世代にはANTLRをお勧めします(http://www.antlr.org)。
また、このWebサイト(http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/)には、特に次のような詳細情報があります。
PythonのインデントはDFAでは解決できません。(文脈自由文法で解決できるかどうか、私はまだ困惑しています)。
PyPyは、Pythonの字句解析に関する興味深い投稿を作成しました(字句解析出力を後処理することで解決する予定です)
CPythonのトークナイザーはCで記述されています。アドホックで、手書きで、複雑です。これは、私が知っているPython字句解析の唯一の公式実装です。