0

Luaコードの基本的なフォーマットを行っています。数学オペランドなどの周りに欠落している空白を追加するようなものです。

引用符の間にある場合(つまり、コード内の文字列を変更したくない場合)、これらのフォーマットを行うのは本当に悪い考えであることに気づきました。

この問題を回避するための最も効果的な方法は何でしょうか。これまでの私の考え:

  • これまでに行ったように正規表現を実行して、編集する場所を見つけてから、文字列の先頭からこの場所までの引用符を数えます。引用符の数が奇数の場合、引用符で囲まれた文字列の中にいます。
  • 行を引用符の内側と外側にある部分に事前に分割し、外側の部分のみをフォーマットします。

明らかな何かが欠けていますか?より良い選択肢?

4

2 に答える 2

2

あなたが説明しているものは通常「きれいなプリンター」と呼ばれます。

Luaの文法は非常に単純なので、最も堅牢なアプローチは、解析されたコードを標準スタイルで出力するだけのLua構文のパーサーを実装することです。これを既存のパーサー(lparser.c)にハックするか、lua- userswikiの既存の文法の1つを使用することができます。文法はLL(1)のように見えるので、単純な再帰下降パーサーまたはLPEGが適切な選択です。

正規表現のみを使用してこれを実行しようとすると、ほとんどの場合、実際のパーサーを使用するよりも多くの作業が発生します。これは、特殊なケースやコンテキスト情報(ネストされた括弧のカウントなど)が正規表現に忍び寄るからです。

于 2013-01-13T02:03:25.050 に答える
0

私が取るアプローチは次のとおりです。

  1. コード内のすべての文字列を番号付きのパターン(たとえば、、、 ...)に置き換えます$1$$2$もちろん$3$、各整数インデックスの元の文字列をテーブルに保持します。
  2. 必要なフォーマットを作成します(ただし、パターンを変更しないように注意してください)。
  3. $%n+$バックパターンを元の文字列に置き換えます。
于 2013-01-12T19:54:47.753 に答える