Skip to content

Commit

Permalink
Merge pull request #12 from dvvgit/master
Browse files Browse the repository at this point in the history
Fixes for issue #11
  • Loading branch information
Nic30 authored Mar 21, 2022
2 parents bae19c2 + cfc29f4 commit be3ff88
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions pyDigitalWaveTools/vcd/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,20 +108,27 @@ def __init__(self):
# $enddefinitions $end
# ------
self.scope = VcdVarScope("root", None)
self.now = 0
self.setNow(0)
self.idcode2series = {}
self.end_of_definitions = False

def value_change(self, vcdId, value):
def value_change(self, vcdId, value, lineNo):
'''append change from VCD file signal data series'''
self.idcode2series[vcdId].append((self.now, value))
try:
self.idcode2series[vcdId].append((self.now, value))
except:
print ("Wrong vcdId @ line", lineNo, ":", vcdId)
pass

def parse_str(self, vcd_string: str):
"""
Same as :func:`~.parse` just for string
"""
buff = StringIO(vcd_string)
return self.parse(buff)

def setNow(self, value):
self.now = int(value) # TODO: can be float

def parse(self, file_handle):
'''
Expand Down Expand Up @@ -159,8 +166,7 @@ def parse(self, file_handle):
fn = self.keyword_dispatch[token.strip()]
fn(tokeniser, token)
elif c == '#':
# [TODO] may be a float
self.now = int(token[1:])
self.setNow (token[1:])
else:
self.vcd_value_change(lineNo, token, tokeniser)

Expand All @@ -177,12 +183,15 @@ def vcd_value_change(self, lineNo, token, tokenizer):
# string value
value = token[1:]
_, vcdId = next(tokenizer)
elif token[0] == '#': # In many VCD files there is no $end terminator
self.setNow(token[1:])
return
else:
# 1 bit value
value = token[0]
vcdId = token[1:]

self.value_change(vcdId, value)
self.value_change(vcdId, value, lineNo)

def parse_error(self, tokeniser, keyword):
raise VcdSyntaxError("Don't understand keyword: ", keyword)
Expand Down

0 comments on commit be3ff88

Please sign in to comment.