diff options
-rw-r--r-- | src/main/scala/scalam/m/ast/package.scala (renamed from src/main/scala/scalam/m/ast/tree.scala) | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/main/scala/scalam/m/ast/tree.scala b/src/main/scala/scalam/m/ast/package.scala index a99b50c..f3a3736 100644 --- a/src/main/scala/scalam/m/ast/tree.scala +++ b/src/main/scala/scalam/m/ast/package.scala @@ -3,9 +3,21 @@ package scalam.m.ast trait Mable { def m: String } //top level m constructs -case class Identifier(name: String) extends Mable { def m: String = name} +case class Identifier(name: String) extends Mable { + def m: String = name + + def toValid = { + val word = name.filter(c => c.isLetterOrDigit || c == '_') + val id = word.headOption match { + case None => sys.error("") + case Some(c) => if (!c.isLetter) 'x' + word else word + } + Identifier(id) + } +} trait Expression extends Mable trait Statement extends Mable +case class Comment(text: String) extends Mable {def m = "% " + text} //expressions case class IntLiteral(x: Int) extends Expression { def m = x.toString } |