Changeset 199
- Timestamp:
- 05/12/05 04:17:42 (4 years ago)
- Files:
-
- manage/branches/python/CLI.py (modified) (8 diffs)
- manage/branches/python/fwc (deleted)
- manage/branches/python/__init__.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
manage/branches/python/CLI.py
r198 r199 87 87 def __init__(self, state, context, grammar, token = None, message = None): 88 88 if not message: message = str(state) 89 self.state, self.message, self.context, self. grammar, self.token = state, message, context, grammar, token89 self.state, self.message, self.context, self.__grammar, self.token = state, message, context, grammar, token 90 90 91 91 def __call__(self): … … 94 94 def execute(self): 95 95 if self.state == Result.OK: 96 return self.context(self. grammar)96 return self.context(self.__grammar) 97 97 raise RuntimeError("CLI parse result was not OK, can't execute") 98 98 99 99 def candidates(self): 100 return self.context.candidates(self. grammar)100 return self.context.candidates(self.__grammar) 101 101 102 102 def help(self): 103 return self.context.extract_help(self. grammar)104 105 class Error(Result ):103 return self.context.extract_help(self.__grammar) 104 105 class Error(Result, Exception): 106 106 def __init__(self, message, context, token, grammar): 107 107 Result.__init__(self, Result.ERROR, context, grammar, token, message) 108 Exception.__init__(self) 108 109 109 110 class CLI: … … 115 116 self.__count = {} 116 117 self.__rangemap = {} 117 self. grammar = self.__copy_grammar(grammar)118 self.__grammar = grammar 118 119 self.text = text 119 120 self.tokens = tokens … … 121 122 self.nodes = [] 122 123 self.result = None 123 self.pre_parse(self.grammar) 124 125 def __copy_grammar(self, grammar): 126 out = {} 127 for k, v in grammar.iteritems(): 128 t = type(v) 129 if t is dict: 130 out[k] = self.__copy_grammar(v) 131 else: 132 if t is types.FunctionType: 133 out[k] = v 134 else: 135 out[k] = copy.copy(v) 136 return out 124 self.pre_parse(self.__grammar) 137 125 138 126 def pre_parse(self, grammar, grammar_key = None): … … 144 132 145 133 def parse(self): 146 return self.parse_branch(self.grammar, self.tokens, self.nodes) 147 148 def traversed(self, node): 149 return self.range(node)[2] 134 return self.parse_branch(self.__grammar, self.tokens, self.nodes) 150 135 151 136 def traverse(self, node): … … 324 309 help, htype = node[HELP], type(node[HELP]) 325 310 if htype is dict: 311 # Delete RANGE from help tree - useless anyway 312 if RANGE in help: del(help[RANGE]) 326 313 return help 327 314 elif htype is tuple or htype is list: … … 354 341 help = self.parse_help_node(k, v) 355 342 if not help: 356 out.append([ k, "No HELP for this grammar node." ]) 343 if type(k) is not types.FunctionType: 344 out.append([ k, "No HELP for this grammar node." ]) 357 345 else: 358 346 keys = help.keys() … … 436 424 437 425 def __init__(self, grammar = {}): 438 self. grammar = grammar439 self. tokenise = re.compile(r'(\'(?:[^\\\']|.)*\'|"(?:[^\\"]|.)*")|(\S+)')426 self.__grammar = grammar 427 self.__tokenise = re.compile(r'(\'(?:[^\\\']|.)*\'|"(?:[^\\"]|.)*")|(\S+)') 440 428 441 429 def parse(self, command): 442 430 tokens = [] 443 431 if type(command) is str: 444 for token in self. tokenise.finditer(command):432 for token in self.__tokenise.finditer(command): 445 433 tokens.append(token) 446 434 else: 447 435 raise TypeError("CLI.parse() must be passed a string command") 448 context = CLI.Context(self. grammar, tokens, command)436 context = CLI.Context(self.__grammar, tokens, command) 449 437 return context.parse()
