私はこれを機能させようとしています:
def emptyCond: Parser[Cond] = ("if" ~ "(") ~> regularStr <~ ")" ^^ { case s => Cond("",Nil,Nil) }
ここで、regularStrは、")" を含む多くのものを受け入れるように定義されています。もちろん、これを受け入れ可能な入力にしたい: if(foo())。しかし、任意のif(x)については、 regularStrの一部として ")" を使用しているため、このパーサーは決して成功しません。
私は何が欠けていますか?
編集:
regularStr は正規表現ではありません。次のように定義されます。
def regularStr = rep(ident | numericLit | decimalLit | stringLit | stmtSymbol) ^^ { case s => s.mkString(" ") }
記号は次のとおりです。
val stmtSymbol = "*" | "&" | "." | "::" | "(" | ")" | "*" | ">=" | "<=" | "=" |
"<" | ">" | "|" | "-" | "," | "^" | "[" | "]" | "?" | ":" | "+" |
"-=" | "+=" | "*=" | "/=" | "&&" | "||" | "&=" | "|="
徹底的な言語チェックは必要ありません。制御構造だけが必要です。したがって、if() の "()" の内容はあまり気にしません。識別子、記号などの任意のシーケンスを受け入れたいと考えています。 " は if の "条件" です。