LOLCODE
スクリプトをScalaパーサーコンビネータを使用して解析します。ここで私はこれまでで得たものである:スカラパーサーコンビネータ:失敗 - eol(行末)が必要です
class ValuePT(val value: String) extends ExpressionPT {
override def toString = value
}
def value: Parser[ValuePT] = (numericLit | stringLit) ^^ {
case a => new ValuePT(a)
}
def expression: Parser[ExpressionPT] = (...| id | value) ^^ {
case a => a
}
def statement: Parser[StatementPT] = (...|expression|...|loop) <~ eol ^^ {case a => a}
def condition: Parser[LoopConditionPT] = (value <~ "YR") ~ id ~ opt(("TIL"|"WILE") ~ expression) ^^ {
case a ~ b ~ Some(c ~ d) => new LoopConditionPT(a toString, b, Option(c -> d))
case a ~ b ~ None => new LoopConditionPT(a toString, b, Option("None" -> new IdentPT("-1")))
}
def loop: Parser[LoopPT] = ("IM IN YR" ~> id ~ opt(condition) <~ eol) ~ rep(statement) <~ "IM OUTTA YR" <~ id ^^ {
case a ~ b ~ c => new LoopPT(a, b, c)
}
私のテストケースは次のようになります。
HAI 1.2
IM IN YR UntilLoop UPPIN YR Var TIL BOTH SAEM Var AN 3
VISIBLE "UntilLoop " Var
IM OUTTA YR UntilLoop
IM IN YR WhileLoop bla YR Var
VISIBLE "WhileLoop " Var
IM OUTTA YR WhileLoop
I HAS A x ITZ 1
I HAS A y ITZ 1
IM IN YR NestedLoop
IM IN YR InnerLoop
VISIBLE "NestedLoop " x " " y
GTFO
IM OUTTA YR InnerLoop
GTFO
IM OUTTA YR NestedLoop
KTHXBYE
しかし、私の機能は動作しません、それはエラーが発生します:
[2.24] failure: eol expected
IM IN YR UntilLoop UPPIN YR Var TIL BOTH SAEM Var AN 3
^
私は理解していないと私は何が原因でエラーが発生するのかわからない、それは私が行方不明だったと言うのですUPPIN
の前にeol
?