と条件のチェックを行うことができます私は(楽しみのために)単純なHTMLテンプレートエンジンを記述しようとしていた、そしてこのは、どのように私はパーサコンビネータ
A.通常の行はHTML
B.あるようにしたいの構造を解析します行が$
で始まるならば、Javaコードの行として表示
$ if (isSuper) {
<span>Are you wearing red underwear?</span>
$ }
C. ${}
が複数行をラップする場合、その中のすべてのコードは、Javaコードであるべきです。
D.ラインがライン上でいくつかのトリックを行う、その後$include
で始まる場合(別のテンプレートを呼び出す)
$include anotherTemplate(id, name)
これはanotherTemplate
の新しいインスタンスを作成し、それがrender()
方法
Eの呼びかけます$def
,$val
のように、$include
以外の "コマンド"がさらに存在します。
これをパーサーコンビネータでどのように表現できますか?実際に、それは1と2の条件付きフォーク
ですが、私はこのようなものだ:upto
がScalate Scamelパーサから借りている
'$' ~> ('{' ~> upto('}') <~ '}' | not('{') <~ newline)
を(私はちょうど読み始めるとできませんかなり理解している)
$....
コードラインと${...}
ブロックを区別するためにnot('{')
を使用しました。しかし、これは扱いにくく、他の「コマンド」にも及んでいません。
どうすればいいですか?
本当に素敵な説明です! –
@ DanielC.Sobralありがとう!それを改善するための提案はありますか? – Harrison