Hamlのパーサぶっ壊れてる問題 本家のHamlは以下の入力を与えるとSyntaxErrorになる。 %div{ foo: "}" } これはHamlが単に{と}の数だけ合わせてパースしているからである。 *1 通常この問題を解決するには字句解析器を使い、現在パースしているのが何のトークンなのか判別する必要がある。 Hamlitではこの問題を解決するため、標準ライブラリとして提供されているRipperを使っている。 そのため、Hamlitでは上記の入力を以下のように正しく解釈することができる。 <div foo='}'></div> HamlのattributeがRubyの式としてvalidでない問題 上記のhamlの%divを取り除いた部分であればRubyのHashとして解釈できそうに見える。 しかし実際には以下のような入力もHamlのattributeとして有効である。*2 - has