Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #2008173/31 хорошо, по примеру из /30
- # node ::= 'node' node_command
- parser.define('node').add_rule('node_command', name='node')
- # node_command ::= node_list| node_attach | node_detach
- node_command = parser.define('node_command')
- node_command.add_alternatives('node_list')
- node_command.add_alternatives('node_attach')
- node_command.add_alternatives('node_detach')
- # node_list ::= 'list'
- parser.define('node_list').add_token('list')
- def node_name_is_available(name=None, force=None, context=None):
- if node in list_of_node_names_from_database:
- if force:
- parser.warning('node "%s" would be replaced' % name)
- else:
- parser.error(context, 'node "%s" is already defined' % name)
- def node_name_does_not_available(name=None, force=None, context=None):
- if not node in list_of_node_names_from_database:
- message = 'node "%s" does not found' % name
- if force:
- parser.warning('%s does not found')
- return not node_name_is_available(name=name)
- # node_attach ::= 'attach' name connect_string optional_force
- 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)
- # node_detach ::= 'detach' name optional_force
- 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')
- # optional_force ::= '-f' | '--force' | eof
- parser.define('optional_force').add_alternatives(parser.token('-f', value=True)).add_alternatives(parser.token('--force'), value=True).add_alternatives(parser.epsilon(), value=False)
- # connect_string ::= connect_string_user connect_string_host connect_string_port
- cs = parser.define('connect_string')
- cs.add_rule('connect_string_user', name='user')
- cs.add_rule('connect_string_host', name='host')
- cs.add_rule('connect_string_port', name='port')
- # connect_string_user ::= name '@'
- parser.define('connect_string_user').add_rule('name').add_token('@', include_result=False)
- # connect_string_host ::= name
- parser.define('connect_string_user').add_rule('name')
- # connect_string_port ::= ':' port
- parser.define('connect_string_user').add_token(':', include_result=False).add_rule('port')
- # port ::= int { > 1024 && < 2^16 }
- parser.define('port').add_digit(condition=lambda x: x >= 1024 and x <= 2 ** 16)
- # name ::= name_simple | name_complex
- name = parser.define('name')
- name.add_alternative('name_simple')
- name.add_alternative('name_complex')
- # name_simple ::= '[a-zA-Z]+[a-zA-Z0-9]*'
- parser.define('name_simple').add_token('[a-zA-Z]+[a-zA-Z0-9]*')
- # name_complex ::= '"' '[a-zA-Z]+[a-zA-Z0-9 ]*' '"'
- 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