Anda di halaman 1dari 2

Lab 2

Lexical Analysis and Parsing


Question1:
a)val regex = new Regex("""/\*((\*[^/])|[^*])*\*/""") b)val regex = new Regex("""'([^\\']|(\\[\\'"?abfnrt])|(\\[0-3][0-7]?[07]?)|(\\[xX][0-9abcef]+))'""") c)val regex = new Regex("([0-9]+)([0-9]+)s") val matches = regex.findAllIn."2'15s, 3'15s, 4'22s").matchData.toList matches.map(_.group(2))

def regex = new Regex("\'\'") def regex2 = new Regex("\"") val str = """ab"cd''ef"g""" regex2.replaceAllIn(regex.replaceAllIn(str, "\'"), "\"\"")

Question2:

def firstMatch(input : String, types : List[Regex]): String = if(types.head.findPrefixOf(input) != None) types.head.findPrefixOf(input).toList.head else firstMatch(input, types.tail)

Question3:

package listing2

Question4:

object Main { class Expr case class Number(value : Int) extends Expr case class Variable(name : String) extends Expr case class Operator(left : Expr, right : Expr, f: (Int, Int) => Int) extends Expr val expr = Operator(Operator(Number(2), Variable("x"), _ * _) , Operator(Variable("x"), Variable("x"), _ * _), _ + _) def eval(expr : Expr, symbols : Map[String, Int]) : Int = expr match { case Number(num) => num case Variable(name) => symbols(name) case Operator(left, right, f) => f(eval(left, symbols), eval(right, symbols)) } def main(args : Array[String]) : Unit = { println( eval(expr, Map("x" -> 5))); } }

Question5:
object Main { case class Symbol(variable: String, value: Int) def lookup(name : String, symbols : List[Symbol]): Any = {

symbols.find(_.variable == name) match { case Some(x)=> x match { case x: Symbol => x.value } case None => None } } def main(args : Array[String]) : Unit = { val syms = Symbol("x", 5)::Nil; val res = lookup("x", syms) if(res != None) println(res.toString); } }

Question6:
class Poly case class case class case class case class Const(value: Double) extends Poly X() extends Poly Sum(a: Poly, b: Poly) extends Poly Prod(a: Poly, b: Poly) extends Poly

object Main { def main(args : Array[String]) : Unit = { } def deriv(p: Poly): Poly = p match { case Const(a) => Const(0) case X() => Const(1.0) case Sum(a,b) => Sum(deriv(a), deriv(b)) case Prod(a,b)=> Sum(Prod(a,deriv(b)), Prod(deriv(a), b)) } val poly = deriv(Sum(Prod(X(),X()),X())) println(poly) }

Anda mungkin juga menyukai