aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scalam/m/ast/expressions.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/scalam/m/ast/expressions.scala')
-rw-r--r--src/main/scala/scalam/m/ast/expressions.scala30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/scala/scalam/m/ast/expressions.scala b/src/main/scala/scalam/m/ast/expressions.scala
new file mode 100644
index 0000000..db99ae6
--- /dev/null
+++ b/src/main/scala/scalam/m/ast/expressions.scala
@@ -0,0 +1,30 @@
+package scalam.m.ast
+
+trait Expression extends Mable with Root{
+ def m: String = this match {
+ case IntLiteral(x) => x.toString
+ case DoubleLiteral(x) => x.toString
+ case StringLiteral(x) => "'" + x + "'"
+ case SliceLiteral => ":"
+ case ArrayLiteral(elements @ _*) => elements.map(_.m).mkString("[", ",", "]")
+ case MatrixLiteral(rows @ _*) => rows.map(_.m).mkString("[", ";", "]")
+
+ case Variable(id) => id.m
+ case IndexMatrix(id, indices @ _*) => id.m + indices.map(_.m).mkString("(", ",", ")")
+ case IndexStructure(id, indices @ _*) => id.m + indices.map(_.m).mkString("{", ",", "}")
+ case Function(id, params @ _*) => id.m + params.map(_.m).mkString("(", ",", ")")
+
+ case _ => throw new IllegalArgumentException("unkown expression: " + this)
+ }
+}
+
+case class IntLiteral(x: Int) extends Expression
+case class DoubleLiteral(x: Double) extends Expression
+case class StringLiteral(x: String) extends Expression
+case object SliceLiteral extends Expression
+case class ArrayLiteral(elements: Expression*) extends Expression
+case class MatrixLiteral(rows: Expression*) extends Expression
+case class Variable(id: Identifier) extends Expression
+case class IndexMatrix(id: Identifier, indices: Expression*) extends Expression
+case class IndexStructure(id: Identifier, indices: Expression*) extends Expression
+case class Function(function: Identifier, params: Expression*) extends Expression \ No newline at end of file