1818from __future__ import print_function
1919import sys
2020import os
21+ import pathlib
2122
2223from pyverilog .vparser .ply .yacc import yacc
2324from pyverilog .vparser .plyparser import PLYParser , Coord , ParseError
@@ -48,14 +49,18 @@ class VerilogParser(PLYParser):
4849 # -> Strong
4950 )
5051
51- def __init__ (self ):
52+ def __init__ (self , outputdir = "." , debug = True ):
5253 self .lexer = VerilogLexer (error_func = self ._lexer_error_func )
5354 self .lexer .build ()
5455
5556 self .tokens = self .lexer .tokens
56- #self.parser = yacc(module=self)
57- # Use this if you want to build the parser using LALR(1) instead of SLR
58- self .parser = yacc (module = self , method = "LALR" )
57+ pathlib .Path (outputdir ).mkdir (parents = True , exist_ok = True )
58+ self .parser = yacc (
59+ module = self ,
60+ method = "LALR" ,
61+ outputdir = outputdir ,
62+ debug = debug
63+ )
5964
6065 def _lexer_error_func (self , msg , line , column ):
6166 self ._parse_error (msg , self ._coord (line , column ))
@@ -2233,13 +2238,16 @@ class VerilogCodeParser(object):
22332238
22342239 def __init__ (self , filelist , preprocess_output = 'preprocess.output' ,
22352240 preprocess_include = None ,
2236- preprocess_define = None ):
2241+ preprocess_define = None ,
2242+ outputdir = "." ,
2243+ debug = True
2244+ ):
22372245 self .preprocess_output = preprocess_output
22382246 self .directives = ()
22392247 self .preprocessor = VerilogPreprocessor (filelist , preprocess_output ,
22402248 preprocess_include ,
22412249 preprocess_define )
2242- self .parser = VerilogParser ()
2250+ self .parser = VerilogParser (outputdir = outputdir , debug = debug )
22432251
22442252 def preprocess (self ):
22452253 self .preprocessor .preprocess ()
@@ -2257,10 +2265,20 @@ def get_directives(self):
22572265 return self .directives
22582266
22592267
2260- def parse (filelist , preprocess_include = None , preprocess_define = None ):
2261- codeparser = VerilogCodeParser (filelist ,
2262- preprocess_include = preprocess_include ,
2263- preprocess_define = preprocess_define )
2268+ def parse (
2269+ filelist ,
2270+ preprocess_include = None ,
2271+ preprocess_define = None ,
2272+ outputdir = "." ,
2273+ debug = True
2274+ ):
2275+ codeparser = VerilogCodeParser (
2276+ filelist ,
2277+ preprocess_include = preprocess_include ,
2278+ preprocess_define = preprocess_define ,
2279+ outputdir = outputdir ,
2280+ debug = debug
2281+ )
22642282 ast = codeparser .parse ()
22652283 directives = codeparser .get_directives ()
22662284 return ast , directives
0 commit comments