Compiler/AST interpreter: Difference between revisions

Content added Content deleted
Line 2,568: Line 2,568:
case class LeafNode(name: String, value: String) extends Node
case class LeafNode(name: String, value: String) extends Node
case object TerminalNode extends Node
case object TerminalNode extends Node

}
</lang>

The above code depends on the function <tt>unescape()</tt> to perform string escape sequence translation. That function is defined in the following separate source file.

<lang scala>
package xyz.hyperreal

import java.io.ByteArrayOutputStream

package object rosettacodeCompiler {

val escapes = "\\\\b|\\\\f|\\\\t|\\\\r|\\\\n|\\\\\\\\|\\\\\"" r

def unescape(s: String) =
escapes.replaceAllIn(s, _.matched match {
case "\\b" => "\b"
case "\\f" => "\f"
case "\\t" => "\t"
case "\\r" => "\r"
case "\\n" => "\n"
case "\\\\" => "\\"
case "\\\"" => "\""
})

def capture(thunk: => Unit) = {
val buf = new ByteArrayOutputStream

Console.withOut(buf)(thunk)
buf.toString
}


}
}