class SourceListParser(object):
def __init__(self):
+ self.symbol_table = {}
self._reset()
def _reset(self, filename=None):
self.line_no = 1
self.line_cont = ''
- self.symbol_table = {}
def _error(self, msg):
raise RuntimeError('%s:%d: %s' % (self.filename, self.line_no, msg))
self._error('not a variable definition')
if op_pos > 0:
- if line[op_pos - 1] in [':', '+']:
+ if line[op_pos - 1] in [':', '+', '?']:
op_pos -= 1
else:
self._error('only =, :=, and += are supported')
self.symbol_table[sym] = val
elif op == '+=':
self.symbol_table[sym] += ' ' + val
+ elif op == '?=':
+ if sym not in self.symbol_table:
+ self.symbol_table[sym] = val
def _parse_line(self, line):
"""Parse a source list line."""
raise
return self.symbol_table
+
+ def add_symbol(self, name, value):
+ self.symbol_table[name] = value