Module: OrigenVerilog
- Defined in:
- lib/origen_verilog.rb,
lib/origen_verilog/node.rb,
lib/origen_verilog/parser.rb,
lib/origen_verilog/processor.rb,
lib/origen_verilog/top_level.rb,
lib/origen_verilog/verilog/node.rb,
lib/origen_verilog/verilog/parser.rb,
lib/origen_verilog/verilog/writer.rb,
lib/origen_verilog/preprocessor/node.rb,
lib/origen_verilog/verilog/evaluator.rb,
lib/origen_verilog/verilog/processor.rb,
lib/origen_verilog/preprocessor/parser.rb,
lib/origen_verilog/preprocessor/writer.rb,
lib/origen_verilog/preprocessor/processor.rb,
lib/origen_verilog/preprocessor/contatenator.rb,
lib/origen_verilog/preprocessor/verilog_parser.rb
Defined Under Namespace
Modules: Preprocessor, Verilog Classes: Extractor, Node, Parser, Processor, TopLevel
Class Method Summary collapse
-
.parse_file(files, options = {}) ⇒ Object
Returns an AST for the given file.
Class Method Details
.parse_file(files, options = {}) ⇒ Object
Returns an AST for the given file
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/origen_verilog.rb', line 30 def self.parse_file(files, = {}) # Assume if multiple files are given, then the last one is the main one to parse, treat those # given up front as equivalent to including them within the main file via a compiler directive files = files.split(/\s/) file = files.pop top_dir = Pathname.new(file).dirname.to_s [:source_dirs] ||= [] [:source_dirs] << top_dir unless [:source_dirs].include?(top_dir) # Read in the file to a pre-processor AST (Verilog captured as blocks of text at this point) ast = Preprocessor::Parser.parse_file(file, ) unless files.empty? files.each do |f| ast = ast.updated(nil, [ast.updated(:include, [f])] + ast.children) end end Array([:defines]).each do |define| name, text = *define.split('=') name = ast.updated(:name, [name]) nodes = [name] nodes << ast.updated(:text, [text]) if text ast = ast.updated(nil, [ast.updated(:define, nodes)] + ast.children) end # Evaluate all compiler directives ast = ast.process() # Now parse as Verilog ast = ast.parse_verilog(.merge(file: file)) end |