示例#1
0
 def __init__(self):
     from tl.bnf.declaration import Declaration
     from tl.bnf.variable import Variable
     Group.__init__(self, [
         "class",
         NamedToken('class_name', Variable),
         TokenFunctor(self.pushClassName),
         Group([
             ":",
             NamedToken('base0', Variable),
             TokenFunctor(self.pushBase0),
             Group([
                 ",",
                 NamedToken('basen', Variable),
                 TokenFunctor(self.pushBaseN),
             ],
                   min=0,
                   max=-1)
         ],
               min=0),
         "{",
         TokenFunctor(self.startScope),
         Group([Declaration], min=0, max=-1),
         "}",
     ])
     self._class_name = None
     self._bases = []
     self._scope = None
示例#2
0
 def __init__(self):
     Group.__init__(self, [
         '<', NamedToken('open', BaliseTag), '>',
         Identifier(r'[^<]+') | Group(Balise, min=0, max=-1)),
         '</', NamedToken('close', BaliseTag), '>',
         TokenFunctor(self.hasSameTag),
     ])
示例#3
0
    def __init__(self, is_affectation=False):
        from tl.bnf.value import Value
        self.is_affectation = is_affectation
        expr = SubExpr(group=(Group(['(', Expression, ')']) | Value))
        expr = AttributeAccessSubExpr(expr)
        for i, op in enumerate(self.__class__.__operators__):
            expr = SubExpr(
                operators=self.__class__.__operators__[i],
                subexpr=expr
            )

        if is_affectation:
            from tl.bnf.variable_value import VariableValue
            ops = list(BinaryInfixOperator(op) for op in self.__affect_operators__)
            Group.__init__(self, [
#                TokenFunctor(self.prepareLeftOperand),
#                AttributeAccessSubExpr(Variable)
#                | TokenFunctor(self.cleanupLeftOperand),
#                TokenFunctor(self.pushLeftOperand),
                AttributeAccessSubExpr(VariableValue),
                Alternative(ops),
                expr
            ])
        else:
            Group.__init__(self, expr)
示例#4
0
 def __init__(self, operators=None, subexpr=None, group=None, min=1, max=1):
     if operators is not None and subexpr is not None:
         ops = list(BinaryInfixOperator(op) for op in operators)
         Group.__init__(self, [
              subexpr,
             Group([Alternative(ops), subexpr], min=0, max=-1)
         ], min=min, max=max)
     elif group is not None:
         Group.__init__(self, group, min, max)
示例#5
0
class ReturnStatement(Group):
    __group__ = ["return", Group([Expression], min=0), ";"]

    def match(self, context):
        expr = context.beginExpression()
        res = Group.match(self, context)
        context.endExpression()
        if res == True:
            context.getCurrentScope().statements.append(
                ["return", expr.clean()])
        return res
示例#6
0
 def __init__(self, keywords, with_expression, min=1, max=1):
     self._keywords = keywords
     self._with_expression = with_expression
     group = [self._keywords]
     if self._with_expression == True:
         from tl.bnf.expression import Expression
         group.extend(["(", Expression, ")"])
     from tl.bnf.statement import Statement
     group.extend([
         "{",
         Group([Statement], min=0, max=-1),
         "}",
         TokenFunctor(self.endScope)]
     )
     Group.__init__(self, group, min=min, max=max)
     self._scope = None
     self._expr = None
示例#7
0
文件: xml.py 项目: fantao963/pybnf
 def __init__(self):
     Group.__init__(self, [
         '<',
         NamedToken('open', Identifier),
         '>',
         NamedToken(
             'content',
             NamedToken('data', Identifier(r'[^<]+'))
             | Group(Balise, min=0, max=-1)),
         '</',
         NamedToken('close', Identifier),
         '>',
         TokenFunctor(self, Balise.hasSameTag),
     ])
     self._open_tag = self.getByName('open')
     self._node_content = self.getByName('content')
     self._close_tag = self.getByName('close')
示例#8
0
 def __init__(self):
     Group.__init__(self, [
         Group([
             NamedToken('type', Type),
             NamedToken('name', Variable),
             TokenFunctor(self.pushBoth)
         ])
         | Group([
             NamedToken('auto_name', Variable),
             TokenFunctor(self.pushName)
         ]),
         Group(Group(
             [TokenFunctor(self.hasBoth),
              Group(['(', Expression, ')'])]) | Group(['=', Expression]),
               min=0,
               max=1), EndStatement
     ])
示例#9
0
文件: csv.py 项目: fantao963/pybnf
class CSV(Group):
    __group__ = Group([Row], max=-1)
示例#10
0
文件: csv.py 项目: fantao963/pybnf
class Row(Group):
    __group__ = [Data, Group([Separator, Data], min=0, max=-1), EOL]

    def onMatch(self, context):
        context.rows.append([])
示例#11
0
文件: xml.py 项目: fantao963/pybnf
class TinyXml(Group):
    __group__ = Group([Balise()], max=-1)