aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Parser.scala
diff options
context:
space:
mode:
authorJack2015-10-02 14:57:46 -0700
committerJack2015-10-02 14:57:46 -0700
commit0b5250463506d86b490ea76d6547c5786d7e5f58 (patch)
tree4d73a9178b14723788a39882d013ccdcfbe4c2df /src/main/scala/firrtl/Parser.scala
parent0a9cc3d72fa2c6f19385efa8350f232e2e9faf10 (diff)
Merged in Scala implementation of FIRRTL IR, parser, and serialization (ie. AST -> String). Uses ANTLRv4 to generate concrete syntax parser
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
+ }
+
+}