3

Python 用の字句解析プログラムをゼロから作成したいと考えています。しかし、どこから、どのように始めたらよいかわかりません。手始めに、アナライザーに渡される一連の文字列として Python プログラムがあると仮定したいと思います。アナライザーは、改行がどこにあり、適切な空白を調べる必要があるかどうかを判断する必要があります。Pythonソースコードで新しい行を見つける方法は? Python の字句仕様を読みました。スタック ベースのアプローチを使用して、空白を使用したインデントを解決できますが、どのように表示するかわかりません。'\n' を使用した正規表現チェックだけですか、それとも何らかのアルゴリズムがありますか?これを決定する方法は?

そのために、意図的に lex、yacc、flex などを使用したくありません。

4

1 に答える 1

1

私は最近、SQL ステートメントを見つけるためのパーサーを開発しました。ルールが異なることは知っていますが、アプローチは似ているかもしれません。python を使用してパーサーを開発しました。最初のステップは、トークンの始まりを見つける正規表現でした。次に、そのリストを有限ステート マシンに渡し、トークンが何を表しているかを判断しました。

改行、セミコロン、文字列、複数の行にまたがる可能性のあるコメントなどを考慮するために必要なルール。Python では、改行とインデントがより重要になります。

個々のステートメントを解析できるようになったら、それらをステートメントを解析できる関数に渡す必要があります。おそらく同様のアプローチを取るでしょう。

SQL パーサーはhttps://github.com/PeterWooster/SQL-Tools/blob/master/SQLStatements.pyにあります。これは、トークンを見つけ、FSM を使用してトークンを処理する方法を示しています。はい、改行をまたぐ文字列を処理します。

于 2013-01-20T22:35:10.727 に答える