Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(791)

Side by Side Diff: tools/lexer_generator/term.py

Issue 169523003: Experimental parser: split and rename some files (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/lexer_generator/rule_parser.py ('k') | tools/lexer_generator/test/automata_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 the V8 project authors. All rights reserved. 1 # Copyright 2014 the V8 project authors. All rights reserved.
2 # Redistribution and use in source and binary forms, with or without 2 # Redistribution and use in source and binary forms, with or without
3 # modification, are permitted provided that the following conditions are 3 # modification, are permitted provided that the following conditions are
4 # met: 4 # met:
5 # 5 #
6 # * Redistributions of source code must retain the above copyright 6 # * Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer. 7 # notice, this list of conditions and the following disclaimer.
8 # * Redistributions in binary form must reproduce the above 8 # * Redistributions in binary form must reproduce the above
9 # copyright notice, this list of conditions and the following 9 # copyright notice, this list of conditions and the following
10 # disclaimer in the documentation and/or other materials provided 10 # disclaimer in the documentation and/or other materials provided
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 return bool(self.__tuple[0]) 62 return bool(self.__tuple[0])
63 63
64 def __eq__(self, other): 64 def __eq__(self, other):
65 return (isinstance(other, self.__class__) and self.__tuple == other.__tuple) 65 return (isinstance(other, self.__class__) and self.__tuple == other.__tuple)
66 66
67 # TODO(dcarney): escape '(', ')' and ',' in strings 67 # TODO(dcarney): escape '(', ')' and ',' in strings
68 def __str__(self): 68 def __str__(self):
69 if self.__str == None: 69 if self.__str == None:
70 self.__str = '(%s)' % ','.join(map(str, self.__tuple)) 70 self.__str = '(%s)' % ','.join(map(str, self.__tuple))
71 return self.__str 71 return self.__str
72
73 class Action(object):
74
75 __empty_action = None
76
77 @staticmethod
78 def empty_action():
79 if Action.__empty_action == None:
80 Action.__empty_action = Action(Term.empty_term(), -1)
81 return Action.__empty_action
82
83 @staticmethod
84 def dominant_action(actions):
85 dominant = Action.empty_action()
86 for action in actions:
87 if not action:
88 continue
89 if not dominant:
90 dominant = action
91 continue
92 if action.precedence() == dominant.precedence():
93 assert action.__term == dominant.__term
94 elif action.precedence() < dominant.precedence():
95 dominant = action
96 return dominant
97
98 def __init__(self, term, precedence):
99 assert isinstance(term, Term)
100 assert type(precedence) == IntType
101 assert not term or precedence >= 0, 'action must have positive precedence'
102 self.__term = term
103 self.__precedence = precedence
104
105 def name(self):
106 return self.__term.name()
107
108 def term(self):
109 return self.__term
110
111 def precedence(self):
112 return self.__precedence
113
114 def __nonzero__(self):
115 'true <==> self == empty_action'
116 return bool(self.__term)
117
118 def __eq__(self, other):
119 return isinstance(other, self.__class__) and self.__term == other.__term
120
121 def __str__(self):
122 return "action <%s>" % ('' if not self.__term else str(self.__term))
OLDNEW
« no previous file with comments | « tools/lexer_generator/rule_parser.py ('k') | tools/lexer_generator/test/automata_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698