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 ))
@@ -2243,13 +2248,16 @@ class VerilogCodeParser(object):
22432248
22442249 def __init__ (self , filelist , preprocess_output = 'preprocess.output' ,
22452250 preprocess_include = None ,
2246- preprocess_define = None ):
2251+ preprocess_define = None ,
2252+ outputdir = "." ,
2253+ debug = True
2254+ ):
22472255 self .preprocess_output = preprocess_output
22482256 self .directives = ()
22492257 self .preprocessor = VerilogPreprocessor (filelist , preprocess_output ,
22502258 preprocess_include ,
22512259 preprocess_define )
2252- self .parser = VerilogParser ()
2260+ self .parser = VerilogParser (outputdir = outputdir , debug = debug )
22532261
22542262 def preprocess (self ):
22552263 self .preprocessor .preprocess ()
@@ -2267,10 +2275,20 @@ def get_directives(self):
22672275 return self .directives
22682276
22692277
2270- def parse (filelist , preprocess_include = None , preprocess_define = None ):
2271- codeparser = VerilogCodeParser (filelist ,
2272- preprocess_include = preprocess_include ,
2273- preprocess_define = preprocess_define )
2278+ def parse (
2279+ filelist ,
2280+ preprocess_include = None ,
2281+ preprocess_define = None ,
2282+ outputdir = "." ,
2283+ debug = True
2284+ ):
2285+ codeparser = VerilogCodeParser (
2286+ filelist ,
2287+ preprocess_include = preprocess_include ,
2288+ preprocess_define = preprocess_define ,
2289+ outputdir = outputdir ,
2290+ debug = debug
2291+ )
22742292 ast = codeparser .parse ()
22752293 directives = codeparser .get_directives ()
22762294 return ast , directives
0 commit comments