0

BASIC では、print ステートメントは次のようになります。

100 PRINT "Copyright, Adrian McMenamin","maybe"

最初のステートメントと 2 番目のステートメントの間にタブ スペースを配置する必要があります。

私は、この行を解析して次のようなものを生成する必要がある Groovy/Java の BASIC 用の DSL/インタープリターに取り組んでいます。

print "Copyright, Adrian McMenamin", "    ","maybe"

(Groovy はコンマを印刷関数のパラメーターを単に区切るものとして解釈するためです。)

では、引用符内にないコンマと引用符内にあるコンマを区別する正規表現は何ですか (PRINT や行番号などは気にしないでください)。

4

2 に答える 2

7

正規表現では扱えない構文解析文法を見ています。通常、正規表現の範囲外にある開き括弧または閉じ括弧をカウントする必要があります。この問題を解決するANTLRなどのパーサーを調べてみてください。このタスクだけではやり過ぎかもしれませんが、複数のタイプの基本的なステートメントを変換する必要があると思います。その場合、正規表現ではなく、パーサーが本当に必要です。

于 2012-07-13T23:00:08.557 に答える
0

オープン クォート (モジュロ 2) をカウントするだけの非常に単純なパーサーを実装しました。これは、BASIC 文字列リテラルの単純なルールが与えられた場合に機能します。このフォームで正しく機能する正規表現を使用して、非常に美しい再帰関数を設計しました。

100 PRINT "Copyright, 2012", "Adrian McMenamin"

しかし、これで失敗しました:

100 PRINT "Copyright, 2012"

まあ、それは DFA のようなスキームの限界にすぎないと思います。

于 2012-07-14T13:45:57.703 に答える