add proxy for the first part and try to develop the second part
This commit is contained in:
@@ -0,0 +1,235 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# CAVEAT UTILITOR
|
||||
#
|
||||
# This file was automatically generated by TatSu.
|
||||
#
|
||||
# https://pypi.python.org/pypi/tatsu/
|
||||
#
|
||||
# Any changes you make to it will be overwritten the next time
|
||||
# the file is generated.
|
||||
|
||||
|
||||
from __future__ import print_function, division, absolute_import, unicode_literals
|
||||
|
||||
import sys
|
||||
|
||||
from tatsu.buffering import Buffer
|
||||
from tatsu.parsing import Parser
|
||||
from tatsu.parsing import tatsumasu, leftrec, nomemo
|
||||
from tatsu.parsing import leftrec, nomemo # noqa
|
||||
from tatsu.util import re, generic_main # noqa
|
||||
|
||||
|
||||
KEYWORDS = {} # type: ignore
|
||||
|
||||
|
||||
class contentlineBuffer(Buffer):
|
||||
def __init__(
|
||||
self,
|
||||
text,
|
||||
whitespace=None,
|
||||
nameguard=None,
|
||||
comments_re=None,
|
||||
eol_comments_re=None,
|
||||
ignorecase=None,
|
||||
namechars='',
|
||||
**kwargs
|
||||
):
|
||||
super(contentlineBuffer, self).__init__(
|
||||
text,
|
||||
whitespace=whitespace,
|
||||
nameguard=nameguard,
|
||||
comments_re=comments_re,
|
||||
eol_comments_re=eol_comments_re,
|
||||
ignorecase=ignorecase,
|
||||
namechars=namechars,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
|
||||
class contentlineParser(Parser):
|
||||
def __init__(
|
||||
self,
|
||||
whitespace=None,
|
||||
nameguard=None,
|
||||
comments_re=None,
|
||||
eol_comments_re=None,
|
||||
ignorecase=None,
|
||||
left_recursion=False,
|
||||
parseinfo=True,
|
||||
keywords=None,
|
||||
namechars='',
|
||||
buffer_class=contentlineBuffer,
|
||||
**kwargs
|
||||
):
|
||||
if keywords is None:
|
||||
keywords = KEYWORDS
|
||||
super(contentlineParser, self).__init__(
|
||||
whitespace=whitespace,
|
||||
nameguard=nameguard,
|
||||
comments_re=comments_re,
|
||||
eol_comments_re=eol_comments_re,
|
||||
ignorecase=ignorecase,
|
||||
left_recursion=left_recursion,
|
||||
parseinfo=parseinfo,
|
||||
keywords=keywords,
|
||||
namechars=namechars,
|
||||
buffer_class=buffer_class,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
@tatsumasu()
|
||||
def _start_(self): # noqa
|
||||
self._contentline_()
|
||||
self.name_last_node('@')
|
||||
self._check_eof()
|
||||
|
||||
@tatsumasu()
|
||||
def _full_(self): # noqa
|
||||
self._contentline_()
|
||||
self.add_last_node_to_name('@')
|
||||
|
||||
def block1():
|
||||
self._pattern('(\\r?\\n)+')
|
||||
self._contentline_()
|
||||
self.add_last_node_to_name('@')
|
||||
self._positive_closure(block1)
|
||||
self._pattern('(\\r?\\n)*')
|
||||
self._check_eof()
|
||||
|
||||
@tatsumasu()
|
||||
def _contentline_(self): # noqa
|
||||
self._ALPHADIGIT_MINUS_PLUS_()
|
||||
self.name_last_node('name')
|
||||
|
||||
def block1():
|
||||
self._token(';')
|
||||
self._param_()
|
||||
self.add_last_node_to_name('params')
|
||||
self._closure(block1)
|
||||
self._token(':')
|
||||
self._VALUE_CHAR_STAR_()
|
||||
self.name_last_node('value')
|
||||
self.ast._define(
|
||||
['name', 'value'],
|
||||
['params']
|
||||
)
|
||||
|
||||
@tatsumasu()
|
||||
def _param_(self): # noqa
|
||||
self._ALPHADIGIT_MINUS_PLUS_()
|
||||
self.name_last_node('name')
|
||||
self._token('=')
|
||||
self._param_value_()
|
||||
self.add_last_node_to_name('values')
|
||||
|
||||
def block2():
|
||||
self._token(',')
|
||||
self._param_value_()
|
||||
self.add_last_node_to_name('values')
|
||||
self._closure(block2)
|
||||
self.ast._define(
|
||||
['name'],
|
||||
['values']
|
||||
)
|
||||
|
||||
@tatsumasu()
|
||||
def _param_value_(self): # noqa
|
||||
with self._choice():
|
||||
with self._option():
|
||||
self._DQUOTE_()
|
||||
self._cut()
|
||||
self._QSAFE_CHAR_STAR_()
|
||||
self.name_last_node('value')
|
||||
self._DQUOTE_()
|
||||
self._constant('true')
|
||||
self.name_last_node('quoted')
|
||||
with self._option():
|
||||
self._SAFE_CHAR_STAR_()
|
||||
self.name_last_node('value')
|
||||
self._constant('false')
|
||||
self.name_last_node('quoted')
|
||||
self._error('no available options')
|
||||
self.ast._define(
|
||||
['quoted', 'value'],
|
||||
[]
|
||||
)
|
||||
|
||||
@tatsumasu()
|
||||
def _ALPHADIGIT_MINUS_PLUS_(self): # noqa
|
||||
self._pattern('[a-zA-Z0-9-]+')
|
||||
|
||||
@tatsumasu()
|
||||
def _QSAFE_CHAR_STAR_(self): # noqa
|
||||
self._pattern('[^\\x00-\\x08\\x0A-\\x1F\\x22\\x7F]*')
|
||||
|
||||
@tatsumasu()
|
||||
def _SAFE_CHAR_STAR_(self): # noqa
|
||||
self._pattern('[^\\x00-\\x08\\x0A-\\x1F\\x22\\x2C\\x3A\\x3B\\x7F]*')
|
||||
|
||||
@tatsumasu()
|
||||
def _VALUE_CHAR_STAR_(self): # noqa
|
||||
self._pattern('[^\\x00-\\x08\\x0A-\\x1F\\x7F]*')
|
||||
|
||||
@tatsumasu()
|
||||
def _DQUOTE_(self): # noqa
|
||||
self._token('"')
|
||||
|
||||
|
||||
class contentlineSemantics(object):
|
||||
def start(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def full(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def contentline(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def param(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def param_value(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def ALPHADIGIT_MINUS_PLUS(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def QSAFE_CHAR_STAR(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def SAFE_CHAR_STAR(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def VALUE_CHAR_STAR(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
def DQUOTE(self, ast): # noqa
|
||||
return ast
|
||||
|
||||
|
||||
def main(filename, start=None, **kwargs):
|
||||
if start is None:
|
||||
start = 'start'
|
||||
if not filename or filename == '-':
|
||||
text = sys.stdin.read()
|
||||
else:
|
||||
with open(filename) as f:
|
||||
text = f.read()
|
||||
parser = contentlineParser()
|
||||
return parser.parse(text, rule_name=start, filename=filename, **kwargs)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import json
|
||||
from tatsu.util import asjson
|
||||
|
||||
ast = generic_main(main, contentlineParser, name='contentline')
|
||||
print('AST:')
|
||||
print(ast)
|
||||
print()
|
||||
print('JSON:')
|
||||
print(json.dumps(asjson(ast), indent=2))
|
||||
print()
|
||||
Reference in New Issue
Block a user