0

ある言語を別の言語に変換するプロジェクトに取り組んでおり、GOLD パーサーを使用しています。コメントを失いたくないので、変換にコメントを含めることができるようにする必要があります。問題は、CommentLine と CommentBlock がノイズとして扱われ、キャプチャされて破棄されることです。この動作をオフにして、コメントが読み取られたときにツリーの残りの部分に送信され、他のステートメントと同様に処理できるようにする簡単な方法はありますか?

そうでない場合、コメントラインを解析時に他のステートメントと同様に処理されるルールに変換するのを手伝ってくれる人はいますか? GOLD Parser Web サイトの VBScript 文法を使用しています。

! Special comment definition
Comment Line   =    ''

この時点での唯一のオプションは、エンジンがコメント トークンを読み取り、生データとソース行番号を取得し、それをディクショナリにスローして、他のトークンが処理されるときに参照できるようにすることです。これは実行可能ですが、面倒になる可能性があります。

4

1 に答える 1

2

5.0 以降、ゴールド パーサーは、終了ターミナルを共有する複数のグループを処理する方法を変更しました。これにより、使用している定義が機能しなくなります (文法を構築するために Rem 部分を削除したと思いますか?)

5.0 以降、2 つの主な変更点があります。

  • 字句グループ
  • グループと端末の属性を変更できます

定義されているこの改行が使用されるため、改行が必要な場合、改行が自動的に宣言されます。(コメントなど)。

コメント + X は自動的に「ノイズ」として分類され、解析時に削除されます。コメントがノイズとして定義されるのを避けるために、パーサー ロジックに不可欠なものであることを具体的に伝える必要があります。

また、使用していたコードはコメントの開始のみを見つけましたが、何もしませんでした。' 記号が見つかった後に何かを「キャプチャ」するには、探しているものを宣言する必要があります。次の行に沿って何かを行うことでこれを実現できます。

! Special Whitespace definition ( All Whitespace's excluding new-lines )
{WS} = {Whitespace} - {CR} - {LF} 

! Special Comment Line definition ( All words,special White-spaces and defined symbols until a Line Break is found ) 
Comment Line = ''({Alphanumeric} | {WS} | [.,-+="] )*{All Newline}  
Rem Line = rem

Comment Line @= {type= Content}
Rem @= {type = Content }

これにより、両方が 2 つの行ベースのグループ (コメント行とレム行) として宣言され、両方がコンテンツ タイプとして定義され、デフォルトのノイズではなくコンテンツとして扱われます。(したがって、パーサーによって削除されるべきではありません)。

さらに読むために、これが役に立てば幸いです:

http://goldparser.org/doc/grammars/define-groups.htm

http://goldparser.org/doc/grammars/group-attributes.htm

http://goldparser.org/doc/grammars/example-group.htm

于 2015-02-17T11:09:28.430 に答える