aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scalam/m
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2012-10-06 19:04:51 +0200
committerJakob Odersky <jodersky@gmail.com>2012-10-06 19:04:51 +0200
commitf47512f3b84fce4c561256c65e224d0b65405e2b (patch)
treed2d0e339ded2f8b92fd1288e157ec2a35e3b560d /src/main/scala/scalam/m
parentbd16da96d89c391c07573b38d150b7c9df2b74be (diff)
downloadscalam-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.scala40
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