私はHOP::Lexerを使って、BlitzMaxモジュールのソースコードをスキャンしてデータを取得しています。私が現在興味を持っているデータの1つの特定の部分は、モジュール記述です。HOP :: Lexer with overlapping tokens
現在、私はModuleInfo "Description: foobar"
またはModuleInfo "Desc: foobar"
という形式の説明を探しています。これは正常に動作します。しかし残念なことに、私がスキャンするほとんどのモジュールはコメントブロックの中で、他の場所で定義された記述を持っています。 BlitzMaxで実際にそれを行う一般的な方法は、ドキュメント生成プログラムが期待するとおりです。
これは、すべてのモジュールの説明がメインソースファイルで定義されている方法です。
Rem
bbdoc: my module description
End Rem
Module namespace.modulename
これは実際問題ではありません。しかし、End Remの後の行には、必要なデータ(モジュール名)も含まれています。これは問題です。なぜなら、2つのトークンの定義がお互いに重なり、最初のトークンが検出された後、それは中断された位置(スキャンされるコンテンツの位置)から継続するからです。モジュール名のトークンが何も検出しないことを意味します。
はい、私はトークンの順序が正しいことを確認しました。カーソルを1行に戻すことは可能ではありません。
モジュール定義(働いたが、現在のテストケースのために働いていない)上にあるレムエンドレムブロック内の記述を取得するためのコードの小片:
[ 'MODULEDESCRIPTION',
qr/[ \t]*\bRem\n(?:\n|.)*?\s*\bEnd[ \t]*Rem\nModule[\s\t]+/i,
sub {
my ($label, $value) = @_;
$value =~ /bbdoc: (.+)/;
[$label, $1];
}
],
中のSO私のテストケース私は最初に1つのコメント、次にブロック(MODULEDESCRIPTION)、ブロックコメント(Rem-End Rem)、モジュール名などをスキャンします。
私が考えることのできる唯一の解決策は、モジュール記述のための2番目のレクサーですが、私はそれを好まないでしょう。 HOP :: Lexerを使って私が望むことは何でもできますか?私のレクサーの
ソースは、私はMODULEDESCRIPTIONを(を少し変更したバージョン)を追加することによってそれを解決してきましたhttps://github.com/maximos/maximus-web/blob/develop/lib/Maximus/Class/Lexer.pm