私は自分の娯楽のためにHTMLパーサーを書いていて、Mを試してみたかったのです。
私はこの作業をHTML4.01標準に基づいており、そこには
STYLE要素とSCRIPT要素はデータモデルにCDATAを使用しますが、これらの要素の場合、CDATAはユーザーエージェントによって異なる方法で処理される必要があります。マークアップとエンティティは生のテキストとして扱われ、そのままアプリケーションに渡される必要があります。文字シーケンス「</」(終了タグのオープン区切り文字)の最初の出現は、要素のコンテンツの終わりを終了するものとして扱われます。有効なドキュメントでは、これが要素の終了タグになります。
しばらく考えて、本当にやりたいのはこんな感じ
syntax Main
= "<script>" Script "</script>"
;
token Script
= TakeWhileNot("</") // this is not valid M grammar
;
開いた山かっこ<の後にスラッシュ/が続くまで一致する、ある種のトークン化ルールを実行したいと思っています。
エスケープシーケンスが単一の文字である場合、これを書くことができたので、これは問題にはなりません。
token Script
= ScriptEscape+
;
token ScriptEscape
= !"<"
;
そして、それはうまくいくでしょう、私がこれを正しい方法で行っているかどうかはわかりませんが、問題は私が別の言語に埋め込まれていることに関連していますが、この場合はスクリプト言語を気にしないので、単に欲しいです頭をスキップします。