मैं निम्नलिखित EBNF कि मैं पार्स करने के लिए करना चाहते हैं:EBNF
PostfixExp -> PrimaryExp ("[" Exp "]"
| . id "(" ExpList ")"
| . length)*
और यह मैं क्या मिल गया है:
def postfixExp: Parser[Expression] = (
primaryExp ~ rep(
"[" ~ expression ~ "]"
| "." ~ ident ~"(" ~ repsep(expression, ",") ~ ")"
| "." ~ "length") ^^ {
case primary ~ list => list.foldLeft(primary)((prim,post) =>
post match {
case "[" ~ length ~ "]" => ElementExpression(prim, length.asInstanceOf[Expression])
case "." ~ function ~"(" ~ arguments ~ ")" => CallMethodExpression(prim, function.asInstanceOf[String], arguments.asInstanceOf[List[Expression]])
case _ => LengthExpression(prim)
}
)
})
लेकिन मुझे पता है कि अगर वहाँ एक चाहते हैं बेहतर तरीका, अधिमानतः कास्टिंग (asInstanceOf) का सहारा लेने के बिना।