これがベトナム大学院の実態だ!

Trường Đại Học Bách Khoa Thành Phố Hồ Chí Minhの大学院修士課程に社会人入学

20160404 Nguyên lý ngôn ngữ lập trình

AstSuite.scala

import org.scalatest.FunSuite
import mc.utils._

class AstSuite extends FunSuite with TestAst {
test("an assignment to an int literal") {
val input = "a = 1;"
val expected = Prog(List(Assign("a", Intlit(1))))
assert(checkAst(input,expected,301))
}
test("an assignment to an expression ") {
val input = "a = a + 4;"
val expected = Prog(List(Assign("a", BinOp("+",Id("a"),Intlit(4)))))
assert(checkAst(input,expected,302))
}
test("a simple if statement") {
val input = "if 2 then a = 2; else a = 5;"
val expected = Prog(List(IfStmt(Intlit(2),Assign("a",Intlit(2)),Assign("a",Intlit(5)))))
assert(checkAst(input,expected,303))
}
// Question 2.
test("Question 2. a") {
val input = """a = 4; if b then a = 2; else a = 5; """
/*val expected = Prog(
List(
Assign("a",Intlit(4)),
IfStmt(
Id("b"),Assign("a",Intlit(2)),
Assign("a",Intlit("a",Intlit(5)))
)
)
)*/
val expected = Prog(List())
assert(checkAst(input,expected,304))
}
test("Question 2. b") {
val input = """a = b + 4; b = c − (d + 4); c = d − 1; """
val expected = Prog(List())
assert(checkAst(input,expected,305))
}
}

 

ASTGeneration.scala

package mc.astgen
import org.antlr.v4.runtime.Token
import org.antlr.v4.runtime.CommonTokenStream
import org.antlr.v4.runtime.ParserRuleContext
import java.io.{PrintWriter,File}
import org.antlr.v4.runtime.ANTLRFileStream
import mc.utils._
import scala.collection.JavaConverters._
import org.antlr.v4.runtime.tree._
import mc.parser._
import mc.parser.MCParser._

class ASTGeneration extends MCBaseVisitor[Any] {

override def visitProg(ctx:ProgContext) = Prog(ctx.stmt.asScala.toList.map(visit(_).asInstanceOf[Stmt]))

//override def visitStmt(ctx:ProgContext) = ctx.getChild(0).accept(this)

}