2

口ひげのテンプレートを解析するときに、Parsec がコメントを認識することに問題があります。
で始まるさまざまな口ひげタグに{{は、すべてブロック コメント ( {{!comment}}) が含まれます。TokenParser に commentStart と commentEnd を設定し{{!まし}}た。
テンプレートにコメントを追加するたびに、Parsec はコメントが予期しないものであると文句を言います。
に一致する唯一のトークンであるため、代わりに mustache 変数が必要です{{

Parsec はいつコメントを削除しますか? ソースがパーサーに到達する前に起こると思っていましたか?

4

1 に答える 1

7

Parsec はコメントを削除しません。ではTokenParser、コメントは空白の下に含まれているため、

whiteSpace tokenParser

コメントと通常の空白 (空白、タブ、改行など) をスキップします。

通常、lexeme parser語彙素に続くすべての空白をスキップするために使用すると、トップレベルのパーサーがソースの先頭の空白をスキップするために必要な最初の空白スキップは 1 つだけです。その後、すべての空白 (コメントを含む) は自動的に処理されます (作成TokenParserするmakeTokenParserによって)。

lexeme空白を手動で使用および処理しない場合は、コメント区切り文字のプレフィックスであるトークン/語彙素に注意する必要があります。最初に接頭辞を試すと成功しますが、コメント区切り文字の一部しか消費しないため、この場合'!'は変数パーサーのために を残して失敗します。

于 2013-01-08T15:02:20.390 に答える