私は、小さなケースを超えて、完全に字句解析と解析に慣れていません。その警告が与えられたので、私の問題は、Scala で方言のような JSP を解析しようとしていることです。char ストリームを lexing していますが、JSP のようなタグに到達すると行き詰まります。
Some text<%tag attribute="value"%>more stuff.
私のレクサーは現在、タグ部分を引き出してトークン化しようとしているので、次のようなものがあります。
def document: Parser[Token] = tag | regular
def tag: Parser[Token] = elem('<') ~ elem('%') ~ rep1(validTagName) ~ tagAttribute.* ~ elem('%') ~ elem('>') ^^ {
case a ~ b ~ tagName ~ tagAttributes ~ c ~ d => {
Tag(tagName.foldLeft("")(_+_)) :: tagAttributes.flatMap(_)
}
}
def validTagName: Parser[Token] = elem("",Character.isLetter(_)) // over-simplified
... Other code for tagAttribute and Tag extends Token here
あなたは今、おそらく 6 つほどの問題を見つけることができるでしょう。最終的にトークン関数はパーサーを返すことになっており、これをすべて正しく理解していれば、パーサーは他のパーサーで構成できます。Parser[Token]
私の考えでは、他のいくつかのオブジェクトを組み合わせてパーサーを構築できるはずです。それを行う方法がわかりません。また、それが最善の方法であるかどうかも完全にはわかりません。