diff options
author | Jakob Odersky <jodersky@gmail.com> | 2012-10-06 19:04:51 +0200 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2012-10-06 19:04:51 +0200 |
commit | f47512f3b84fce4c561256c65e224d0b65405e2b (patch) | |
tree | d2d0e339ded2f8b92fd1288e157ec2a35e3b560d /src/main/scala/scalam/m | |
parent | bd16da96d89c391c07573b38d150b7c9df2b74be (diff) | |
download | scalam-f47512f3b84fce4c561256c65e224d0b65405e2b.tar.gz scalam-f47512f3b84fce4c561256c65e224d0b65405e2b.tar.bz2 scalam-f47512f3b84fce4c561256c65e224d0b65405e2b.zip |
add initial files
Diffstat (limited to 'src/main/scala/scalam/m')
-rw-r--r-- | src/main/scala/scalam/m/ast/tree.scala | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/main/scala/scalam/m/ast/tree.scala b/src/main/scala/scalam/m/ast/tree.scala new file mode 100644 index 0000000..cad1859 --- /dev/null +++ b/src/main/scala/scalam/m/ast/tree.scala @@ -0,0 +1,40 @@ +package scalam.m.ast + +trait Mable { def m: String } + +//top level m constructs +case class Identifier(name: String) extends Mable { def m: String = name} +trait Expression extends Mable +trait Statement extends Mable + +//expressions +case class IntLiteral(x: Int) extends Expression { def m = x.toString } +case class DoubleLiteral(x: Double) extends Expression { def m = x.toString } +case class StringLiteral(x: String) extends Expression { def m = "'" + x.toString + "'" } +case object SliceLiteral extends Expression { def m = ":" } +case class ArrayLiteral(elements: Expression*) extends Expression { + def m = elements.mkString("[", ",", "]") +} + +case class Variable(id: Identifier) extends Expression { def m = id.m } +case class IndexMatrix(id: Identifier, indices: Expression*) extends Expression { + def m = id.m + indices.map(_.m).mkString("(", ",", ")") +} +case class IndexStructure(id: Identifier, indices: Expression*) extends Expression { + def m = id.m + indices.map(_.m).mkString("{", ",", "}") +} +case class Call(function: Identifier, params: Expression*) extends Expression { + def m = function.m + params.map(_.m).mkString("(", ",", ")") +} + +//statements +case class Assign(variable: Identifier, value: Expression) extends Statement { + def m = variable.m + " = " + value.m + ";" +} +case class AssignMatrixIndex(variable: Identifier, indices: Seq[Expression], value: Expression) extends Statement { + def m = variable.m + indices.map(_.m).mkString("(", ",", ")") + " = " + value.m + ";" +} + +case class Evaluate(expression: Expression) extends Statement { + def m = expression.m + ";" +}
\ No newline at end of file |