Я пишу Parser в Скале и застрял в этой точке:Синтаксический в Скале/Java
private def expression : Parser[Expression] = cond | variable | integer | liste | function
private def cond : Parser[Expression] = "if" ~ predicate ~ "then" ~ expression ~ "else" ~ expression ^^ {case _~i~_~t~_~el => Cond(i,t,el)}
private def predicate: Parser[Predicate] = identifier ~ "?" ~ "(" ~ repsep(expression, ",") ~ ")" ^^{case n~_~_~el~_ => Predicate(n,el)}
private def function: Parser[Expression] = identifier ~ "(" ~ repsep(expression, ",") ~ ")" ^^{case n~_~el~_ => Function(n,el)}
private def liste: Parser[Expression] = "[" ~ repsep(expression, ",") ~ "]" ^^ {case _~ls~_ => Liste(ls)}
private def variable: Parser[Expression] = identifier ^^ {case v => Variable(v)}
def identifier: Parser[String] = """[a-zA-Z0-9]+""".r ^^ { _.toString }
def integer: Parser[Integer] = num ^^ { case i => Integer(i)}
def num: Parser[String] = """(-?\d*)""".r ^^ {_.toString}
Моя проблема заключается в том, что, когда дело доходит до «выражение» парсер не всегда принимает правильный путь , Например, если его funk(x,y)
пытается проанализировать его как переменную ant, а не как функцию.
Любая идея?
порядок изменений в 'выражение'. попробуйте использовать функцию перед переменной. – Rumoku
Я думаю, что ||| может ли его решить? – mstranne
Что это должно быть с [tag: java]? –