パーサー ユーティリティを使用してlog
解析をトレースしています。
スカラコード:
import scala.util.parsing.combinator.JavaTokenParsers
object Arith extends JavaTokenParsers with App {
def expr: Parser[Any] = log(term~rep("+"~term | "-"~term))("expr")
def term: Parser[Any] = factor~rep("*"~factor | "/"~factor)
def factor: Parser[Any] = floatingPointNumber | "("~expr~")"
println(parseAll(expr, "2 * (3 + 7)"))
}
出力:
trying expr at scala.util.parsing.input.CharSequenceReader@13a317a
trying expr at scala.util.parsing.input.CharSequenceReader@14c1103
expr --> [1.11] parsed: ((3~List())~List((+~(7~List()))))
expr --> [1.12] parsed: ((2~List((*~(((~((3~List())~List((+~(7~List())))))~)))))~List())
[1.12] parsed: ((2~List((*~(((~((3~List())~List((+~(7~List())))))~)))))~List())
入力は として出力されscala.util.parsing.input.CharSequenceReader@13a317a
ます。「2 * (3 + 7)」のような入力の文字列表現を出力する方法はありますか?