aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Parser.scala
diff options
context:
space:
mode:
authorAdam Izraelevitz2015-10-05 10:28:41 -0700
committerAdam Izraelevitz2015-10-05 10:28:41 -0700
commit0a9dfbe9f58338fc8af11015f6e9227e0cb46ea4 (patch)
tree6ecac3e05509202dc7ad94fb03f41300ebf89619 /src/main/scala/firrtl/Parser.scala
parent0a9cc3d72fa2c6f19385efa8350f232e2e9faf10 (diff)
parentedd894af01d004b417c11f264c5302896f321c7d (diff)
Merge pull request #44 from jackkoenig/master
Add Scala implementation to firrtl repo
Diffstat (limited to 'src/main/scala/firrtl/Parser.scala')
-rw-r--r--src/main/scala/firrtl/Parser.scala44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/Parser.scala b/src/main/scala/firrtl/Parser.scala
new file mode 100644
index 00000000..35e41222
--- /dev/null
+++ b/src/main/scala/firrtl/Parser.scala
@@ -0,0 +1,44 @@
+package firrtl
+
+import org.antlr.v4.runtime._;
+import org.antlr.v4.runtime.atn._;
+import org.antlr.v4.runtime.tree._;
+import java.io.FileInputStream
+import scala.collection.JavaConverters._
+import scala.io.Source
+import Utils._
+import antlr._
+
+object Parser
+{
+
+ /** Takes a firrtl filename, returns AST (root node is Circuit)
+ *
+ * Currently must be standard FIRRTL file
+ * Parser performs conversion to machine firrtl
+ */
+ def parse(filename: String): Circuit = {
+ //val antlrStream = new ANTLRInputStream(input.reader)
+ val fixedInput = Translator.addBrackets(Source.fromFile(filename).getLines)
+ val antlrStream = new ANTLRInputStream(fixedInput.result)
+ val lexer = new FIRRTLLexer(antlrStream)
+ val tokens = new CommonTokenStream(lexer)
+ val parser = new FIRRTLParser(tokens)
+
+ // FIXME Dangerous
+ parser.getInterpreter.setPredictionMode(PredictionMode.SLL)
+
+ // Concrete Syntax Tree
+ val cst = parser.circuit
+
+ val visitor = new Visitor(filename)
+ //val ast = visitor.visitCircuit(cst) match {
+ val ast = visitor.visit(cst) match {
+ case c: Circuit => c
+ case x => throw new ClassCastException("Error! AST not rooted with Circuit node!")
+ }
+
+ ast
+ }
+
+}