The parse tree classes are under:
srcs/v2k/parser/treeThere are 133 .java source files there; no wonder it's taken a while.
NOTE: ANTLR does have (automatic) AST (Abstract Syntax Tree) building capability. However, I wanted to experience the very hands-on experience of crafting my own, for this project. Not to worry, there will be many more parsers, for many more DSLs to work on; and, automatic AST generation will be more efficient there.
There is a simple script
> bin/ptree
Error: Must specify at least one "infile".
Usage: v2kparse [options] infile...
Options:
-I dir Add dir (must be readable) to `include file search path.
-D name Predefine name as a macro with value 1.
-D name=defn Predefine name as a macro with value defn.
Those options are less friendly than the (more common) Verilog style options (as in
bin/analyze
; see earlier blogs); but useful for testing.Examine the
bin/analyze
and bin/ptree
script to see the latter simply defines the constant USEPT
(use parse tree). This constant is detected in file srcs/v2k/parser/Parser.java
and selects which sub-class ofpublic abstract class ASTreeBaseto build the tree. There are 2 sub-classes:
v2k.parser.tree.basic.ParseTree
v2k.parser.tree.ParseTree
tree.basic.ParseTree
is used to build a simple tree which simply tracks module names and instances. That is used by the bin/analyze
script to glean info appropriate for source file dependency tracking (described in earlier blogs.) The 2nd one: tree.ParseTree
is used for full tree construction, as in the bin/ptree
script.So, get your hands dirty playing around with
bin/ptree
. And, if you embelish the bin/analyze
script with use of the -DUSEPT
argument to java, then you could also get a full-blown parse tree, and use the more standard Verilog command line arguments, too. However, since the analyze script also uses jruby hooks to generate usable output, by walking the basic.ParseTree
, the jruby scripts would also have to be changed (since the API of the basic.ParseTree
and (full) tree.ParseTree
is slightly different).The next phase of the project is to add elaboration...
No comments:
Post a Comment