我试图让它工作:
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 的“条件”。