mirror of
https://git.rtems.org/rtems-tools/
synced 2025-10-14 04:46:20 +08:00
Update rtems-tool to support Python 2 and 3.
Add solaris and netbsd. Close #2619.
This commit is contained in:
@@ -17,5 +17,6 @@
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
all = ['mi_parser']
|
||||
from mi_parser import scan
|
||||
from mi_parser import process
|
||||
from . import mi_parser
|
||||
scan = mi_parser.scan
|
||||
process = mi_parser.process
|
||||
|
@@ -28,10 +28,12 @@
|
||||
|
||||
# $Id$
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import re
|
||||
import pprint
|
||||
import spark
|
||||
|
||||
from . import spark
|
||||
|
||||
def __private():
|
||||
class Token:
|
||||
@@ -190,7 +192,7 @@ def __private():
|
||||
def n_result(self, node):
|
||||
# result ::= variable = value
|
||||
node.value = { node[0].value: node[2].value }
|
||||
#print('result: %s' % node.value)
|
||||
#print 'result: %s' % node.value
|
||||
|
||||
def n_tuple(self, node):
|
||||
if len(node) == 2:
|
||||
@@ -203,9 +205,9 @@ def __private():
|
||||
# tuple ::= { result result_list }
|
||||
node.value = node[1].value
|
||||
for result in node[2].value:
|
||||
for n, v in result.items():
|
||||
if node.value.has_key(n):
|
||||
#print('**********list conversion: [%s] %s -> %s' % (n, node.value[n], v))
|
||||
for n, v in list(result.items()):
|
||||
if n in node.value:
|
||||
#print '**********list conversion: [%s] %s -> %s' % (n, node.value[n], v)
|
||||
old = node.value[n]
|
||||
if not isinstance(old, list):
|
||||
node.value[n] = [ node.value[n] ]
|
||||
@@ -214,7 +216,7 @@ def __private():
|
||||
node.value[n] = v
|
||||
else:
|
||||
raise Exception('Invalid tuple')
|
||||
#print('tuple: %s' % node.value)
|
||||
#print 'tuple: %s' % node.value
|
||||
|
||||
def n_list(self, node):
|
||||
if len(node) == 2:
|
||||
@@ -230,7 +232,7 @@ def __private():
|
||||
#list ::= [ result result_list ]
|
||||
#list ::= { value }
|
||||
#list ::= { value value_list }
|
||||
#print('list %s' % node.value)
|
||||
#print 'list %s' % node.value
|
||||
|
||||
def n_value_list(self, node):
|
||||
if len(node) == 2:
|
||||
@@ -247,7 +249,7 @@ def __private():
|
||||
else:
|
||||
# result_list ::= , result result_list
|
||||
node.value = [ node[1].value ] + node[2].value
|
||||
#print('result_list: %s' % node.value)
|
||||
#print 'result_list: %s' % node.value
|
||||
|
||||
def n_result_record(self, node):
|
||||
node.value = node[0].value
|
||||
@@ -257,7 +259,7 @@ def __private():
|
||||
elif len(node) == 2:
|
||||
# result_record ::= result_header nl
|
||||
pass
|
||||
#print('result_record: %s' % (node.value))
|
||||
#print 'result_record: %s' % (node.value)
|
||||
|
||||
def n_result_header(self, node):
|
||||
if len(node) == 3:
|
||||
@@ -284,7 +286,7 @@ def __private():
|
||||
'value': node[1].value,
|
||||
'record_type': 'stream'
|
||||
}
|
||||
#print('stream_record: %s' % node.value)
|
||||
#print 'stream_record: %s' % node.value
|
||||
|
||||
def n_record_list(self, node):
|
||||
if len(node) == 1:
|
||||
@@ -293,10 +295,10 @@ def __private():
|
||||
elif len(node) == 2:
|
||||
# record_list ::= generic_record record_list
|
||||
node.value = [ node[0].value ] + node[1].value
|
||||
#print('record_list: %s' % node.value)
|
||||
#print 'record_list: %s' % node.value
|
||||
|
||||
#def default(self, node):
|
||||
#print('default: ' + node.type)
|
||||
#print 'default: ' + node.type
|
||||
|
||||
class GdbDynamicObject:
|
||||
def __init__(self, dict_):
|
||||
@@ -305,7 +307,7 @@ def __private():
|
||||
def __repr__(self):
|
||||
return pprint.pformat(self.__dict__)
|
||||
|
||||
def __nonzero__(self):
|
||||
def __bool__(self):
|
||||
return len(self.__dict__) > 0
|
||||
|
||||
def __getitem__(self, i):
|
||||
@@ -320,7 +322,7 @@ def __private():
|
||||
return None
|
||||
|
||||
def graft(self, dict_):
|
||||
for name, value in dict_.items():
|
||||
for name, value in list(dict_.items()):
|
||||
name = name.replace('-', '_')
|
||||
if isinstance(value, dict):
|
||||
value = GdbDynamicObject(value)
|
||||
@@ -336,7 +338,7 @@ def __private():
|
||||
class GdbMiRecord:
|
||||
def __init__(self, record):
|
||||
self.result = None
|
||||
for name, value in record[0].items():
|
||||
for name, value in list(record[0].items()):
|
||||
name = name.replace('-', '_')
|
||||
if name == 'results':
|
||||
for result in value:
|
||||
@@ -370,7 +372,7 @@ def process(input):
|
||||
if __name__ == '__main__':
|
||||
def main():
|
||||
def print_tokens(tokens):
|
||||
print
|
||||
print()
|
||||
for token in tokens:
|
||||
if token.value:
|
||||
print(token.type + ': ' + token.value)
|
||||
|
@@ -19,6 +19,8 @@
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
__version__ = 'SPARK-0.7 (pre-alpha-7)'
|
||||
|
||||
import re
|
||||
@@ -30,8 +32,8 @@ def _namelist(instance):
|
||||
for c in classlist:
|
||||
for b in c.__bases__:
|
||||
classlist.append(b)
|
||||
for name in c.__dict__.keys():
|
||||
if not namedict.has_key(name):
|
||||
for name in list(c.__dict__.keys()):
|
||||
if name not in namedict:
|
||||
namelist.append(name)
|
||||
namedict[name] = 1
|
||||
return namelist
|
||||
@@ -42,7 +44,7 @@ class GenericScanner:
|
||||
self.re = re.compile(pattern, re.VERBOSE|flags)
|
||||
|
||||
self.index2func = {}
|
||||
for name, number in self.re.groupindex.items():
|
||||
for name, number in list(self.re.groupindex.items()):
|
||||
self.index2func[number-1] = getattr(self, 't_' + name)
|
||||
|
||||
def makeRE(self, name):
|
||||
@@ -57,7 +59,7 @@ class GenericScanner:
|
||||
rv.append(self.makeRE(name))
|
||||
|
||||
rv.append(self.makeRE('t_default'))
|
||||
return string.join(rv, '|')
|
||||
return '|'.join(rv)
|
||||
|
||||
def error(self, s, pos):
|
||||
print("Lexical error at position %s" % pos)
|
||||
@@ -81,7 +83,7 @@ class GenericScanner:
|
||||
groups = m.groups()
|
||||
self.pos = m.end()
|
||||
for i in range(len(groups)):
|
||||
if groups[i] is not None and self.index2func.has_key(i):
|
||||
if groups[i] is not None and i in self.index2func:
|
||||
self.index2func[i](groups[i])
|
||||
|
||||
def t_default(self, s):
|
||||
@@ -145,14 +147,14 @@ class GenericParser:
|
||||
changes = 1
|
||||
while changes:
|
||||
changes = 0
|
||||
for k, v in self.edges.items():
|
||||
for k, v in list(self.edges.items()):
|
||||
if v is None:
|
||||
state, sym = k
|
||||
if self.states.has_key(state):
|
||||
if state in self.states:
|
||||
self.goto(state, sym)
|
||||
changes = 1
|
||||
rv = self.__dict__.copy()
|
||||
for s in self.states.values():
|
||||
for s in list(self.states.values()):
|
||||
del s.items
|
||||
del rv['rule2func']
|
||||
del rv['nullable']
|
||||
@@ -179,7 +181,7 @@ class GenericParser:
|
||||
|
||||
def addRule(self, doc, func, _preprocess=1):
|
||||
fn = func
|
||||
rules = string.split(doc)
|
||||
rules = doc.split()
|
||||
|
||||
index = []
|
||||
for i in range(len(rules)):
|
||||
@@ -195,7 +197,7 @@ class GenericParser:
|
||||
if _preprocess:
|
||||
rule, fn = self.preprocess(rule, func)
|
||||
|
||||
if self.rules.has_key(lhs):
|
||||
if lhs in self.rules:
|
||||
self.rules[lhs].append(rule)
|
||||
else:
|
||||
self.rules[lhs] = [ rule ]
|
||||
@@ -218,7 +220,7 @@ class GenericParser:
|
||||
self.nullable = {}
|
||||
tbd = []
|
||||
|
||||
for rulelist in self.rules.values():
|
||||
for rulelist in list(self.rules.values()):
|
||||
lhs = rulelist[0][0]
|
||||
self.nullable[lhs] = 0
|
||||
for rule in rulelist:
|
||||
@@ -233,7 +235,7 @@ class GenericParser:
|
||||
# grammars.
|
||||
#
|
||||
for sym in rhs:
|
||||
if not self.rules.has_key(sym):
|
||||
if sym not in self.rules:
|
||||
break
|
||||
else:
|
||||
tbd.append(rule)
|
||||
@@ -267,7 +269,7 @@ class GenericParser:
|
||||
|
||||
def makeNewRules(self):
|
||||
worklist = []
|
||||
for rulelist in self.rules.values():
|
||||
for rulelist in list(self.rules.values()):
|
||||
for rule in rulelist:
|
||||
worklist.append((rule, 0, 1, rule))
|
||||
|
||||
@@ -276,7 +278,7 @@ class GenericParser:
|
||||
n = len(rhs)
|
||||
while i < n:
|
||||
sym = rhs[i]
|
||||
if not self.rules.has_key(sym) or \
|
||||
if sym not in self.rules or \
|
||||
not self.nullable[sym]:
|
||||
candidate = 0
|
||||
i = i + 1
|
||||
@@ -293,7 +295,7 @@ class GenericParser:
|
||||
if candidate:
|
||||
lhs = self._NULLABLE+lhs
|
||||
rule = (lhs, rhs)
|
||||
if self.newrules.has_key(lhs):
|
||||
if lhs in self.newrules:
|
||||
self.newrules[lhs].append(rule)
|
||||
else:
|
||||
self.newrules[lhs] = [ rule ]
|
||||
@@ -320,7 +322,7 @@ class GenericParser:
|
||||
self.states = { 0: self.makeState0() }
|
||||
self.makeState(0, self._BOF)
|
||||
|
||||
for i in xrange(len(tokens)):
|
||||
for i in range(len(tokens)):
|
||||
sets.append([])
|
||||
|
||||
if sets[i] == []:
|
||||
@@ -349,8 +351,8 @@ class GenericParser:
|
||||
#
|
||||
return self._NULLABLE == sym[0:len(self._NULLABLE)]
|
||||
|
||||
def skip(self, lhs_rhs, pos=0):
|
||||
lhs, rhs = lhs_rhs
|
||||
def skip(self, xxx_todo_changeme, pos=0):
|
||||
(lhs, rhs) = xxx_todo_changeme
|
||||
n = len(rhs)
|
||||
while pos < n:
|
||||
if not self.isnullable(rhs[pos]):
|
||||
@@ -373,7 +375,7 @@ class GenericParser:
|
||||
|
||||
core.sort()
|
||||
tcore = tuple(core)
|
||||
if self.cores.has_key(tcore):
|
||||
if tcore in self.cores:
|
||||
return self.cores[tcore]
|
||||
#
|
||||
# Nope, doesn't exist. Compute it and the associated
|
||||
@@ -397,13 +399,13 @@ class GenericParser:
|
||||
|
||||
nextSym = rhs[pos]
|
||||
key = (X.stateno, nextSym)
|
||||
if not rules.has_key(nextSym):
|
||||
if not edges.has_key(key):
|
||||
if nextSym not in rules:
|
||||
if key not in edges:
|
||||
edges[key] = None
|
||||
X.T.append(nextSym)
|
||||
else:
|
||||
edges[key] = None
|
||||
if not predicted.has_key(nextSym):
|
||||
if nextSym not in predicted:
|
||||
predicted[nextSym] = 1
|
||||
for prule in rules[nextSym]:
|
||||
ppos = self.skip(prule)
|
||||
@@ -427,10 +429,10 @@ class GenericParser:
|
||||
# need to know the entire set of predicted nonterminals
|
||||
# to do this without accidentally duplicating states.
|
||||
#
|
||||
core = predicted.keys()
|
||||
core = list(predicted.keys())
|
||||
core.sort()
|
||||
tcore = tuple(core)
|
||||
if self.cores.has_key(tcore):
|
||||
if tcore in self.cores:
|
||||
self.edges[(k, None)] = self.cores[tcore]
|
||||
return k
|
||||
|
||||
@@ -441,7 +443,7 @@ class GenericParser:
|
||||
|
||||
def goto(self, state, sym):
|
||||
key = (state, sym)
|
||||
if not self.edges.has_key(key):
|
||||
if key not in self.edges:
|
||||
#
|
||||
# No transitions from state on sym.
|
||||
#
|
||||
@@ -613,7 +615,7 @@ class GenericParser:
|
||||
rule = self.ambiguity(self.newrules[nt])
|
||||
else:
|
||||
rule = self.newrules[nt][0]
|
||||
#print(rule)
|
||||
#print rule
|
||||
|
||||
rhs = rule[1]
|
||||
attr = [None] * len(rhs)
|
||||
@@ -632,14 +634,14 @@ class GenericParser:
|
||||
rule = choices[0]
|
||||
if len(choices) > 1:
|
||||
rule = self.ambiguity(choices)
|
||||
#print(rule)
|
||||
#print rule
|
||||
|
||||
rhs = rule[1]
|
||||
attr = [None] * len(rhs)
|
||||
|
||||
for i in range(len(rhs)-1, -1, -1):
|
||||
sym = rhs[i]
|
||||
if not self.newrules.has_key(sym):
|
||||
if sym not in self.newrules:
|
||||
if sym != self._BOF:
|
||||
attr[i] = tokens[k-1]
|
||||
key = (item, k)
|
||||
@@ -669,7 +671,7 @@ class GenericParser:
|
||||
sortlist.append((len(rhs), name))
|
||||
name2index[name] = i
|
||||
sortlist.sort()
|
||||
list = list(map(lambda a,b: b, sortlist))
|
||||
list = [a_b[1] for a_b in sortlist]
|
||||
return rules[name2index[self.resolve(list)]]
|
||||
|
||||
def resolve(self, list):
|
||||
@@ -838,11 +840,11 @@ def _dump(tokens, sets, states):
|
||||
for item in sets[i]:
|
||||
print('\t', item)
|
||||
for (lhs, rhs), pos in states[item[0]].items:
|
||||
print('\t\t', lhs, '::=',)
|
||||
print(string.join(rhs[:pos]),)
|
||||
print('.',)
|
||||
print('\t\t', lhs, '::=', end=' ')
|
||||
print(string.join(rhs[:pos]), end=' ')
|
||||
print('.', end=' ')
|
||||
print(string.join(rhs[pos:]))
|
||||
if i < len(tokens):
|
||||
print
|
||||
print()
|
||||
print('token', str(tokens[i]))
|
||||
print
|
||||
print()
|
||||
|
Reference in New Issue
Block a user