Пример #1
0
 def __init__(self):
     self.loglexer = LOGLexer()
     self.loglexer.build()
     self.tokens = self.loglexer.tokens
     self.logparser = yacc.yacc(module=self,
                                start='File',
                                errorlog=yacc.NullLogger())
Пример #2
0
 def __init__(self):
     self.loglexer = LOGLexer()
     self.loglexer.build()
     self.tokens = self.loglexer.tokens
     self.logparser = yacc.yacc(module=self, start='File', errorlog=yacc.NullLogger())
Пример #3
0
class LOGParser():
    def __init__(self):
        self.loglexer = LOGLexer()
        self.loglexer.build()
        self.tokens = self.loglexer.tokens
        self.logparser = yacc.yacc(module=self, start='File', errorlog=yacc.NullLogger())
        # self.logparser = yacc.yacc(module=self, start='File')

    def parse(self, text, filename='', debuglevel=0):
        self.loglexer.filename = filename
        return self.logparser.parse(input=text, lexer=self.loglexer, debug=debuglevel)

    def p_File(self, p):
        """ File : ValueEstimateList
        """
        p[0] = log_ast.File(p[1])

    def p_ValueEstimateList(self, p):
        """ ValueEstimateList : ValueEstimate
                              | ValueEstimateList ValueEstimate
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_ValueEstimate(self, p):
        """ ValueEstimate : Variable IN Value
        """
        p[0] = log_ast.ValueEstimate(p[1], p[3])

    def p_Variable(self, p):
        """ Variable    :  ScalarVariable
                        |  ArrayVariable
                        |  StructVariable
        """
        p[0] = p[1]

    def p_ScalarVariable(self, p):
        """ ScalarVariable : IDENT
        """
        p[0] = log_ast.ScalarVariable(p[1])

    def p_ArrayVariable(self, p):
        """ ArrayVariable : Variable NumberRange
        """
        p[0] = log_ast.ArrayVariable(p[1], p[2])

    def p_NumberRange(self, p):
        """ NumberRange         : SingleRange
                                | DoubleRange
        """
        p[0] = p[1]

    def p_SingleRange(self, p):
        """ SingleRange : LBRACKET Number RBRACKET
        """
        p[0] = log_ast.SingleRange(p[2])

    def p_DoubleRange(self, p):
        """ DoubleRange : LBRACKET Number TO Number RBRACKET
        """
        p[0] = log_ast.DoubleRange(p[2], p[4])

    def p_Number(self, p):
        """ Number                  : DecNumber
                                    | HexNumber
                                    | Float
                                    | INFINITY
        """
        if p[1] == '--':
            p[0] = log_ast.Infinity()
        else:
            p[0] = p[1]

    def p_DecNumber(self, p):
        """ DecNumber               : Sign CONST_DEC
        """
        p[0] = p[1] + p[2]

    def p_Sign(self, p):
        """ Sign                    : empty
                                    | PLUS
                                    | MINUS
        """
        if p[1] is None:
            p[0] = ''
        else:
            p[0] = p[1]

    def p_Float(self, p):
        """ Float       : Sign FLOATING_CONSTANT
        """
        p[0] = p[1] + p[2]

    def p_HexNumber(self, p):
        """ HexNumber    : CONST_HEX
        """
        p[0] = p[1]

    def p_StructVariable(self, p):
        """ StructVariable  : Variable Field
                            | Variable LBRACE FieldList RBRACE
        """
        if len(p) == 3:
            p[0] = log_ast.StructVariable(p[1], [p[2]])
        else:
            p[0] = log_ast.StructVariable(p[1], p[3])

    def p_FieldList(self, p):
        """ FieldList   : FieldList SEMI Field
                        | Field
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_Field(self, p):
        """ Field   : DOT Variable
        """
        p[0] = log_ast.Field(p[2])

    def p_Value(self, p):
        """ Value : ValueSet
                  | ValueRange
                  | ValueMemSet
        """
        p[0] = p[1]

    def p_ValueSet(self, p):
        """ ValueSet    : LBRACE NumberList RBRACE
        """
        p[0] = log_ast.ValueSet(p[2])

    def p_NumberList(self, p):
        """ NumberList  : Number
                        | NumberList SEMI Number
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_ValueRange(self, p):
        """ ValueRange : LBRACKET Number TO Number RBRACKET Trailing
        """
        p[0] = log_ast.ValueRange(p[2], p[4])

    def p_Trailing(self, p):
        """ Trailing : empty
                     | COMMA DumpExpression
        """

    def p_DumpExpression(self, p):
        """ DumpExpression : Number PERCENT Number
        """

    def p_ValueMemSet(self, p):
        """ ValueMemSet : LDBRACE MemExpressionList RDBRACE
        """
        p[0] = log_ast.ValueMemSet(p[2])

    def p_MemExpressionList(self, p):
        """ MemExpressionList   : MemExpression
                                | MemExpressionList SEMI MemExpression
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_MemExpression(self, p):
        """ MemExpression   : NULL
                            | AddressExpression
                            | ValueRangeExpression
                            | ComboExpression
        """
        if p[1] == 'NULL':
            p[0] = log_ast.NullExpression()
        else:
            p[0] = p[1]

    def p_AddressExpression(self, p):
        """ AddressExpression : AMBER Variable
        """
        p[0] = log_ast.AddressExpression(p[2])

    def p_ValueRangeExpression(self, p):
        """ ValueRangeExpression : LBRACKET Number TO Number RBRACKET
        """
        p[0] = log_ast.ValueRangeExpression(p[2], p[4])

    def p_ComboExpression(self, p):
        """ ComboExpression   : MemExpression PLUS MemExpression
        """
        p[0] = log_ast.ComboExpression(p[1], p[3])

    def p_empty(self, p):
        'empty : '

    def p_error(self, p):
        raise TypeError("Parser: unknown text at %r" % (p.value,))
Пример #4
0
class LOGParser():
    def __init__(self):
        self.loglexer = LOGLexer()
        self.loglexer.build()
        self.tokens = self.loglexer.tokens
        self.logparser = yacc.yacc(module=self,
                                   start='File',
                                   errorlog=yacc.NullLogger())
        # self.logparser = yacc.yacc(module=self, start='File')

    def parse(self, text, filename='', debuglevel=0):
        self.loglexer.filename = filename
        return self.logparser.parse(input=text,
                                    lexer=self.loglexer,
                                    debug=debuglevel)

    def p_File(self, p):
        """ File : ValueEstimateList
        """
        p[0] = log_ast.File(p[1])

    def p_ValueEstimateList(self, p):
        """ ValueEstimateList : ValueEstimate
                              | ValueEstimateList ValueEstimate
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_ValueEstimate(self, p):
        """ ValueEstimate : Variable IN Value
        """
        p[0] = log_ast.ValueEstimate(p[1], p[3])

    def p_Variable(self, p):
        """ Variable    :  ScalarVariable
                        |  ArrayVariable
                        |  StructVariable
        """
        p[0] = p[1]

    def p_ScalarVariable(self, p):
        """ ScalarVariable : IDENT
        """
        p[0] = log_ast.ScalarVariable(p[1])

    def p_ArrayVariable(self, p):
        """ ArrayVariable : Variable NumberRange
        """
        p[0] = log_ast.ArrayVariable(p[1], p[2])

    def p_NumberRange(self, p):
        """ NumberRange         : SingleRange
                                | DoubleRange
        """
        p[0] = p[1]

    def p_SingleRange(self, p):
        """ SingleRange : LBRACKET Number RBRACKET
        """
        p[0] = log_ast.SingleRange(p[2])

    def p_DoubleRange(self, p):
        """ DoubleRange : LBRACKET Number TO Number RBRACKET
        """
        p[0] = log_ast.DoubleRange(p[2], p[4])

    def p_Number(self, p):
        """ Number                  : DecNumber
                                    | HexNumber
                                    | Float
                                    | INFINITY
        """
        if p[1] == '--':
            p[0] = log_ast.Infinity()
        else:
            p[0] = p[1]

    def p_DecNumber(self, p):
        """ DecNumber               : Sign CONST_DEC
        """
        p[0] = p[1] + p[2]

    def p_Sign(self, p):
        """ Sign                    : empty
                                    | PLUS
                                    | MINUS
        """
        if p[1] is None:
            p[0] = ''
        else:
            p[0] = p[1]

    def p_Float(self, p):
        """ Float       : Sign FLOATING_CONSTANT
        """
        p[0] = p[1] + p[2]

    def p_HexNumber(self, p):
        """ HexNumber    : CONST_HEX
        """
        p[0] = p[1]

    def p_StructVariable(self, p):
        """ StructVariable  : Variable Field
                            | Variable LBRACE FieldList RBRACE
        """
        if len(p) == 3:
            p[0] = log_ast.StructVariable(p[1], [p[2]])
        else:
            p[0] = log_ast.StructVariable(p[1], p[3])

    def p_FieldList(self, p):
        """ FieldList   : FieldList SEMI Field
                        | Field
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_Field(self, p):
        """ Field   : DOT Variable
        """
        p[0] = log_ast.Field(p[2])

    def p_Value(self, p):
        """ Value : ANYTHING
                   | ValueSet
                   | ValueRange
                   | ValueRangePeriodicity
                   | ValueMemSet
        """
        p[0] = p[1]

    def p_ValueSet(self, p):
        """ ValueSet    : LBRACE NumberList RBRACE
        """
        p[0] = log_ast.ValueSet(p[2])

    def p_NumberList(self, p):
        """ NumberList  : Number
                        | NumberList SEMI Number
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_ValueRange(self, p):
        """ ValueRange : LBRACKET Number TO Number RBRACKET
        """
        p[0] = log_ast.ValueRange(p[2], p[4])

    def p_ValueRangePeriodicity(self, p):
        """ ValueRangePeriodicity : LBRACKET Number TO Number RBRACKET COMMA Number PERCENT Number
        """
        p[0] = log_ast.ValueRangePeriodicity(p[2], p[4], p[7], p[9])

    def p_ValueMemSet(self, p):
        """ ValueMemSet : LDBRACE MemExpressionList RDBRACE
        """
        p[0] = log_ast.ValueMemSet(p[2])

    def p_MemExpressionList(self, p):
        """ MemExpressionList   : MemExpression
                                | MemExpressionList SEMI MemExpression
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_MemExpression(self, p):
        """ MemExpression   : NULL
                            | STRING_LITERAL
                            | AddressExpression
                            | ValueRangeExpression
                            | ValueRangePeriodicityExpression
                            | ValueSetExpression
                            | ComboExpression
        """
        if p[1] == 'NULL':
            p[0] = log_ast.NullExpression()
        else:
            p[0] = p[1]

    def p_AddressExpression(self, p):
        """ AddressExpression : AMBER AddressVariable
        """
        p[0] = p[2]

    def p_AddressVariable(self, p):
        """ AddressVariable    : AddressScalarVariable
                               | AddressCompoundVariable
        """
        p[0] = p[1]

    def p_AddressScalarVariable(self, p):
        """ AddressScalarVariable : IDENT
        """
        p[0] = log_ast.AddressScalarVariable(p[1])

    def p_AddressCompoundVariable(self, p):
        """ AddressCompoundVariable : IDENT LBRACE AddressFieldList RBRACE
                                    | IDENT Field
                                    | IDENT LBRACKET Number RBRACKET
        """
        if len(p) == 3:
            p[0] = log_ast.AddressCompoundVariable(p[1], [p[2]])
        else:
            if p[2] == '[':
                p[0] = log_ast.AddressCompoundVariable(
                    p[1], [log_ast.AddressField(p[3])])
            else:
                p[0] = log_ast.AddressCompoundVariable(p[1], p[3])

    def p_AddressFieldList(self, p):
        """ AddressFieldList   : AddressFieldList COMMA AddressField
                               | AddressField
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[3]]

    def p_AddressField(self, p):
        """ AddressField    : LBRACKET Number RBRACKET Field
                            | LBRACKET Number RBRACKET
                            | Field
        """
        if len(p) == 4:
            p[0] = log_ast.AddressField(p[2])
        elif len(p) == 5:
            p[0] = log_ast.AddressField(p[2], p[4])
        else:
            p[0] = p[1]

    def p_ValueRangeExpression(self, p):
        """ ValueRangeExpression : ValueRange
        """
        p[0] = p[1]

    def p_ValueRangePeriodicityExpression(self, p):
        """ ValueRangePeriodicityExpression : ValueRangePeriodicity
        """
        p[0] = p[1]

    def p_ValueSetExpression(self, p):
        """ ValueSetExpression : ValueSet
        """
        p[0] = p[1]

    def p_ComboExpression(self, p):
        """ ComboExpression   : MemExpression PLUS MemExpression
        """
        p[0] = log_ast.ComboExpression(p[1], p[3])

    def p_empty(self, p):
        'empty : '

    def p_error(self, p):
        if p is not None:
            raise TypeError("Parser: unknown text at line %s: %r" %
                            (p.lineno, p.value))
        else:
            raise TypeError("Unexpected input")