Advertisement
zamotivator

Untitled

Aug 6th, 2012
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #2008173/31 хорошо, по примеру из /30
  2.  
  3. # node ::= 'node' node_command
  4. parser.define('node').add_rule('node_command', name='node')
  5.  
  6. # node_command ::= node_list| node_attach | node_detach
  7. node_command = parser.define('node_command')
  8. node_command.add_alternatives('node_list')
  9. node_command.add_alternatives('node_attach')
  10. node_command.add_alternatives('node_detach')
  11.  
  12. # node_list ::= 'list'
  13. parser.define('node_list').add_token('list')
  14.  
  15. def node_name_is_available(name=None, force=None, context=None):
  16. if node in list_of_node_names_from_database:
  17. if force:
  18. parser.warning('node "%s" would be replaced' % name)
  19. else:
  20. parser.error(context, 'node "%s" is already defined' % name)
  21.  
  22. def node_name_does_not_available(name=None, force=None, context=None):
  23. if not node in list_of_node_names_from_database:
  24. message = 'node "%s" does not found' % name
  25. if force:
  26. parser.warning('%s does not found')
  27. return not node_name_is_available(name=name)
  28.  
  29. # node_attach ::= 'attach' name connect_string optional_force
  30. parser.define('node_attach').add_token('attach').add_rule('name', name='name').add_rule('connect_string').add_rule('optional_force', name='force').add_check(node_name_is_available)
  31.  
  32. # node_detach ::= 'detach' name optional_force
  33. parser.define('node_detach').add_token('detach').add_rule('name', name='name', check=node_name_is_available).add_rule('connect_string').add_rule('optional_force')
  34.  
  35. # optional_force ::= '-f' | '--force' | eof
  36. parser.define('optional_force').add_alternatives(parser.token('-f', value=True)).add_alternatives(parser.token('--force'), value=True).add_alternatives(parser.epsilon(), value=False)
  37.  
  38. # connect_string ::= connect_string_user connect_string_host connect_string_port
  39. cs = parser.define('connect_string')
  40. cs.add_rule('connect_string_user', name='user')
  41. cs.add_rule('connect_string_host', name='host')
  42. cs.add_rule('connect_string_port', name='port')
  43.  
  44. # connect_string_user ::= name '@'
  45. parser.define('connect_string_user').add_rule('name').add_token('@', include_result=False)
  46.  
  47. # connect_string_host ::= name
  48. parser.define('connect_string_user').add_rule('name')
  49.  
  50. # connect_string_port ::= ':' port
  51. parser.define('connect_string_user').add_token(':', include_result=False).add_rule('port')
  52.  
  53. # port ::= int { > 1024 && < 2^16 }
  54. parser.define('port').add_digit(condition=lambda x: x >= 1024 and x <= 2 ** 16)
  55.  
  56. # name ::= name_simple | name_complex
  57. name = parser.define('name')
  58. name.add_alternative('name_simple')
  59. name.add_alternative('name_complex')
  60.  
  61. # name_simple ::= '[a-zA-Z]+[a-zA-Z0-9]*'
  62. parser.define('name_simple').add_token('[a-zA-Z]+[a-zA-Z0-9]*')
  63.  
  64. # name_complex ::= '"' '[a-zA-Z]+[a-zA-Z0-9 ]*' '"'
  65. parser.define('name_complex').add_token('"', include_result=False).add_token('[a-zA-Z]+[a-zA-Z0-9 ]*').add_token('"', include_result=False)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement