return 'ast.AST.Text({0:s})'.format(', '.join(params))
# GENERATE END
- class Element(element.Element):
+ class DeclarationOrStatement(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
- tag = 'AST_Element',
+ tag = 'AST_DeclarationOrStatement',
attrib = {},
text = '',
children = []
def copy(self, factory = None):
result = element.Element.copy(
self,
- Element if factory is None else factory
+ DeclarationOrStatement if factory is None else factory
)
return result
def __repr__(self):
params = []
self.repr_serialize(params)
- return 'ast.AST.Element({0:s})'.format(', '.join(params))
+ return 'ast.AST.DeclarationOrStatement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- for i in self:
- i.translate(context)
- prev_empty = True
- for i in range(len(self) + 1):
- text = element.get_text(self, i).strip()
- next_empty = (
- i >= len(self) or
- (len(self[i]) == 0 and len(element.get_text(self[i], 0)) == 0)
- )
- if len(text) == 0:
- if prev_empty:
- text = ''
- prev_empty = next_empty
- elif next_empty:
- text = ''
- prev_empty = False
- else:
- text = ' '
- else:
- if prev_empty:
- prev_empty = False
- elif text[0] not in ',;)}]':
- text = ' ' + text
- if next_empty:
- prev_empty = text[-1] in '({['
- elif text[0] not in '({[':
- text = text + ' '
- element.set_text(self, i, text)
-
- class DeclarationOrStatement(Element):
+ def translate_declaration_or_statement(self, context):
+ #text = element.to_text(self).strip()
+ #assert text[-1] == ';'
+ #context.lines.append(
+ # '{0:s}{1:s}\n'.format(context.indent, text[:-1])
+ #)
+ print(self)
+ raise NotImplementedError
+
+ class Statement(DeclarationOrStatement):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
- tag = 'AST_DeclarationOrStatement',
+ tag = 'AST_Statement',
attrib = {},
text = '',
children = []
):
- AST.Element.__init__(
+ AST.DeclarationOrStatement.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = AST.DeclarationOrStatement.copy(
self,
- DeclarationOrStatement if factory is None else factory
+ Statement if factory is None else factory
)
return result
def __repr__(self):
params = []
self.repr_serialize(params)
- return 'ast.AST.DeclarationOrStatement({0:s})'.format(', '.join(params))
+ return 'ast.AST.Statement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate_declaration_or_statement(self, context):
- text = element.to_text(self).strip()
- assert text[-1] == ';'
- context.lines.append(
- '{0:s}{1:s}\n'.format(context.indent, text[:-1])
- )
- class Statement(DeclarationOrStatement):
+ class Declarator(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
- tag = 'AST_Statement',
+ tag = 'AST_Declarator',
attrib = {},
text = '',
children = []
):
- AST.DeclarationOrStatement.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.DeclarationOrStatement.copy(
+ result = element.Element.copy(
self,
- Statement if factory is None else factory
+ Declarator if factory is None else factory
)
return result
def __repr__(self):
params = []
self.repr_serialize(params)
- return 'ast.AST.Statement({0:s})'.format(', '.join(params))
+ return 'ast.AST.Declarator({0:s})'.format(', '.join(params))
# GENERATE END
+ def get_type_and_name(self, base_type):
+ print(self)
+ raise NotImplementedError
- class Declarator(Element):
+ class Expression(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
- tag = 'AST_Declarator',
+ tag = 'AST_Expression',
attrib = {},
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
- Declarator if factory is None else factory
+ Expression if factory is None else factory
)
return result
def __repr__(self):
params = []
self.repr_serialize(params)
- return 'ast.AST.Declarator({0:s})'.format(', '.join(params))
+ return 'ast.AST.Expression({0:s})'.format(', '.join(params))
# GENERATE END
- def get_type_and_name(self, base_type):
+ def translate_expression(self, context, precedence):
+ #return element.to_text(self).strip()
+ print(self)
raise NotImplementedError
+ def translate_statement_expression(self, context):
+ return self.translate_expression(context, 0)
- class Expression(Element):
- # GENERATE ELEMENT() BEGIN
+ class ExpressionUnary(Expression):
+ # GENERATE ELEMENT(str unary_operator, bool postfix) BEGIN
def __init__(
self,
- tag = 'AST_Expression',
+ tag = 'AST_ExpressionUnary',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Element.__init__(
+ AST.Expression.__init__(
self,
tag,
attrib,
text,
children
)
+ self.unary_operator = unary_operator
+ self.postfix = (
+ element.deserialize_bool(postfix)
+ if isinstance(postfix, str) else
+ postfix
+ )
+ def serialize(self, ref_list):
+ AST.Expression.serialize(self, ref_list)
+ self.set('unary_operator', element.serialize_str(self.unary_operator))
+ self.set('postfix', element.serialize_bool(self.postfix))
+ def deserialize(self, ref_list):
+ AST.Expression.deserialize(self, ref_list)
+ self.unary_operator = element.deserialize_str(self.get('unary_operator', ''))
+ self.postfix = element.deserialize_bool(self.get('postfix', 'false'))
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = AST.Expression.copy(
self,
- Expression if factory is None else factory
+ ExpressionUnary if factory is None else factory
)
+ result.unary_operator = self.unary_operator
+ result.postfix = self.postfix
return result
+ def repr_serialize(self, params):
+ AST.Expression.repr_serialize(self, params)
+ if self.unary_operator != '':
+ params.append(
+ 'unary_operator = {0:s}'.format(repr(self.unary_operator))
+ )
+ if self.postfix != False:
+ params.append(
+ 'postfix = {0:s}'.format(repr(self.postfix))
+ )
def __repr__(self):
params = []
self.repr_serialize(params)
- return 'ast.AST.Expression({0:s})'.format(', '.join(params))
+ return 'ast.AST.ExpressionUnary({0:s})'.format(', '.join(params))
# GENERATE END
- def translate_expression(self, context):
- return element.to_text(self).strip()
+ def translate_expression(self, context, precedence):
+ if self.postfix:
+ text = '{0:s}{1:s}'.format(
+ self[0].translate_expression(context, 14),
+ self.unary_operator
+ )
+ if 14 < precedence:
+ text = '({0:s})'.format(text)
+ else:
+ text = '{0:s}{1:s}'.format(
+ self.unary_operator,
+ self[0].translate_expression(context, 13)
+ )
+ if 13 < precedence:
+ text = '({0:s})'.format(text)
+ return text
+
+ class ExpressionBinary(Expression):
+ # GENERATE ELEMENT(str binary_operator, int precedence, bool right_to_left) BEGIN
+ def __init__(
+ self,
+ tag = 'AST_ExpressionBinary',
+ attrib = {},
+ text = '',
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
+ ):
+ AST.Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.binary_operator = binary_operator
+ self.precedence = (
+ element.deserialize_int(precedence)
+ if isinstance(precedence, str) else
+ precedence
+ )
+ self.right_to_left = (
+ element.deserialize_bool(right_to_left)
+ if isinstance(right_to_left, str) else
+ right_to_left
+ )
+ def serialize(self, ref_list):
+ AST.Expression.serialize(self, ref_list)
+ self.set('binary_operator', element.serialize_str(self.binary_operator))
+ self.set('precedence', element.serialize_int(self.precedence))
+ self.set('right_to_left', element.serialize_bool(self.right_to_left))
+ def deserialize(self, ref_list):
+ AST.Expression.deserialize(self, ref_list)
+ self.binary_operator = element.deserialize_str(self.get('binary_operator', ''))
+ self.precedence = element.deserialize_int(self.get('precedence', '-1'))
+ self.right_to_left = element.deserialize_bool(self.get('right_to_left', 'false'))
+ def copy(self, factory = None):
+ result = AST.Expression.copy(
+ self,
+ ExpressionBinary if factory is None else factory
+ )
+ result.binary_operator = self.binary_operator
+ result.precedence = self.precedence
+ result.right_to_left = self.right_to_left
+ return result
+ def repr_serialize(self, params):
+ AST.Expression.repr_serialize(self, params)
+ if self.binary_operator != '':
+ params.append(
+ 'binary_operator = {0:s}'.format(repr(self.binary_operator))
+ )
+ if self.precedence != -1:
+ params.append(
+ 'precedence = {0:s}'.format(repr(self.precedence))
+ )
+ if self.right_to_left != False:
+ params.append(
+ 'right_to_left = {0:s}'.format(repr(self.right_to_left))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.AST.ExpressionBinary({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def translate_expression(self, context, precedence):
+ text = '{0:s}{1:s}{2:s}'.format(
+ self[0].translate_expression(
+ context,
+ self.precedence + int(self.right_to_left)
+ ),
+ self.binary_operator,
+ self[1].translate_expression(
+ context,
+ self.precedence + int(not self.right_to_left)
+ )
+ )
+ if self.precedence < precedence:
+ text = '({0:s})'.format(text)
+ return text
# type analysis
class Type(element.Element):
return 'ast.AST.Type({0:s})'.format(', '.join(params))
# GENERATE END
def translate_zero(self, context):
+ print(self)
raise NotImplementedError
class TypeVoid(Type):
)
# syntax classes
- class AlignAsExpression(Element):
+ class AlignAsExpression(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
AlignAsExpression if factory is None else factory
)
return 'ast.AST.AlignAsExpression({0:s})'.format(', '.join(params))
# GENERATE END
- class AlignAsType(Element):
+ class AlignAsType(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
AlignAsType if factory is None else factory
)
return 'ast.AST.AlignAsType({0:s})'.format(', '.join(params))
# GENERATE END
- class ArgumentExpressionList(Element):
+ class ArgumentExpressionList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
ArgumentExpressionList if factory is None else factory
)
return 'ast.AST.ArgumentExpressionList({0:s})'.format(', '.join(params))
# GENERATE END
- class BlockItemList(Element):
+ class BlockItemList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
BlockItemList if factory is None else factory
)
(
type.translate_zero(context)
if isinstance(i[1], AST.EqualsInitializerEmpty) else
- i[1].translate_expression(context)
+ i[1].translate_expression(context, 0)
)
)
)
- class DeclarationList(Element):
+ class DeclarationList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DeclarationList if factory is None else factory
)
AST.TypePointer(target_type = base_type)
)
- class DefaultTypeName(Element):
+ class DefaultTypeName(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DefaultTypeName if factory is None else factory
)
return 'ast.AST.DefaultTypeName({0:s})'.format(', '.join(params))
# GENERATE END
- class DesignatorField(Element):
+ class DesignatorField(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DesignatorField if factory is None else factory
)
return 'ast.AST.DesignatorField({0:s})'.format(', '.join(params))
# GENERATE END
- class DesignatorIndex(Element):
+ class DesignatorIndex(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DesignatorIndex if factory is None else factory
)
return 'ast.AST.DesignatorIndex({0:s})'.format(', '.join(params))
# GENERATE END
- class DesignatorInitializer(Element):
+ class DesignatorInitializer(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DesignatorInitializer if factory is None else factory
)
return 'ast.AST.DesignatorInitializer({0:s})'.format(', '.join(params))
# GENERATE END
- class DesignatorInitializerList(Element):
+ class DesignatorInitializerList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DesignatorInitializerList if factory is None else factory
)
return 'ast.AST.DesignatorInitializerList({0:s})'.format(', '.join(params))
# GENERATE END
- class DesignatorList(Element):
+ class DesignatorList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
DesignatorList if factory is None else factory
)
return 'ast.AST.DesignatorList({0:s})'.format(', '.join(params))
# GENERATE END
- class EnumSpecifier(Element):
+ class EnumSpecifier(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
EnumSpecifier if factory is None else factory
)
return 'ast.AST.EnumSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class Enumerator(Element):
+ class Enumerator(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
Enumerator if factory is None else factory
)
return 'ast.AST.Enumerator({0:s})'.format(', '.join(params))
# GENERATE END
- class EnumeratorList(Element):
+ class EnumeratorList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
EnumeratorList if factory is None else factory
)
return 'ast.AST.EnumeratorList({0:s})'.format(', '.join(params))
# GENERATE END
- class EqualsInitializerEmpty(Element):
+ class EqualsInitializerEmpty(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
EqualsInitializerEmpty if factory is None else factory
)
return 'ast.AST.EqualsInitializerEmpty({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionAdd(Expression):
+ class ExpressionAdd(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionAdd',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionAdd if factory is None else factory
)
return 'ast.AST.ExpressionAdd({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionAddAssignment(Expression):
+ class ExpressionAddAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionAddAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionAddAssignment if factory is None else factory
)
return 'ast.AST.ExpressionAddAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionAddressOf(Expression):
+ class ExpressionAddressOf(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionAddressOf',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionAddressOf if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionAddressOf({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '&')
- element.set_text(self, 1, '')
- class ExpressionAlignOfType(Expression):
+ class ExpressionAlignOfType(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionAlignOfType',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionAlignOfType if factory is None else factory
)
return 'ast.AST.ExpressionArray({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionAssignment(Expression):
+ class ExpressionAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionAssignment if factory is None else factory
)
return 'ast.AST.ExpressionAsterisk({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionBitwiseAnd(Expression):
+ class ExpressionBitwiseAnd(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionBitwiseAnd',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionBitwiseAnd if factory is None else factory
)
return 'ast.AST.ExpressionBitwiseAnd({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionBitwiseAndAssignment(Expression):
+ class ExpressionBitwiseAndAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionBitwiseAndAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionBitwiseAndAssignment if factory is None else factory
)
return 'ast.AST.ExpressionBitwiseAndAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionBitwiseNot(Expression):
+ class ExpressionBitwiseNot(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionBitwiseNot',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionBitwiseNot if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionBitwiseNot({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '~')
- element.set_text(self, 1, '')
- class ExpressionBitwiseOr(Expression):
+ class ExpressionBitwiseOr(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionBitwiseOr',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionBitwiseOr if factory is None else factory
)
return 'ast.AST.ExpressionBitwiseOr({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionBitwiseOrAssignment(Expression):
+ class ExpressionBitwiseOrAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionBitwiseOrAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionBitwiseOrAssignment if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionCall({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, '(')
- element.set_text(self, 2, ')')
+ def translate_expression(self, context, precedence):
+ text = '{0:s}({1:s})'.format(
+ self[0].translate_expression(context, 14),
+ ', '.join([i.translate_expression(context, 1) for i in self[1]])
+ )
+ if 14 < precedence:
+ text = '({0:s})'.format(text)
+ return text
class ExpressionCast(Expression):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.ExpressionCast({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, '(')
- element.set_text(self, 2, ')')
class ExpressionCharConstant(Expression):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.ExpressionCharConstant({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 0
- element.set_text(
- self,
- 0,
- 'ord({0:s})'.format(element.get_text(self, 0).strip())
- )
+ def translate_expression(self, context, precedence):
+ return 'ord(\'{0:s}\')'.format(element.get_text(self[0], 0))
- class ExpressionComma(Expression):
+ class ExpressionComma(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionComma',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionComma if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionConditional({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- #xml.etree.ElementTree.dump(self)
- assert len(self) == 3
- self[0].translate(context)
- self[1].translate(context)
- self[2].translate(context)
- self[0], self[1] = self[1], self[0]
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' if ')
- element.set_text(self, 2, ' else ')
- element.set_text(self, 3, '')
-
- class ExpressionDereference(Expression):
+ def translate_expression(self, context, precedence):
+ text = '{0:s} if {1:s} else {2:s}'.format(
+ self[1].translate_expression(context, 3),
+ self[0].translate_expression(context, 0),
+ self[2].translate_expression(context, 2)
+ )
+ if 2 < precedence:
+ text = '({0:s})'.format(text)
+ return text
+
+ class ExpressionDereference(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionDereference',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionDereference if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionDereference({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '*')
- element.set_text(self, 1, '')
- class ExpressionDivide(Expression):
+ class ExpressionDivide(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionDivide',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionDivide if factory is None else factory
)
return 'ast.AST.ExpressionDivide({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionDivideAssignment(Expression):
+ class ExpressionDivideAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionDivideAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionDivideAssignment if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionEmpty({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_expression(self, context, precedence):
+ return 'True'
+ def translate_statement_expression(self, context):
+ return 'pass'
- class ExpressionEqual(Expression):
+ class ExpressionEqual(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionEqual',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionEqual if factory is None else factory
)
return 'ast.AST.ExpressionEqual({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionExclusiveOr(Expression):
+ class ExpressionExclusiveOr(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionExclusiveOr',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionExclusiveOr if factory is None else factory
)
return 'ast.AST.ExpressionExclusiveOr({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionExclusiveOrAssignment(Expression):
+ class ExpressionExclusiveOrAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionExclusiveOrAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionExclusiveOrAssignment if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionField({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_expression(self, context, precedence):
+ text = '{0:s}.{1:s}'.format(
+ self[0].translate_expression(context, 14),
+ element.get_text(self[1], 0)
+ )
+ if 14 < precedence:
+ text = '({0:s})'.format(text)
+ return text
class ExpressionFieldDereference(Expression):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.ExpressionFieldDereference({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_expression(self, context, precedence):
+ text = '{0:s}->{1:s}'.format(
+ self[0].translate_expression(context, 14),
+ element.get_text(self[1], 0)
+ )
+ if 14 < precedence:
+ text = '({0:s})'.format(text)
+ return text
class ExpressionFloatLiteral(Expression):
# GENERATE ELEMENT() BEGIN
return 'ast.AST.ExpressionFunctionName({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionGreaterThan(Expression):
+ class ExpressionGreaterThan(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionGreaterThan',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionGreaterThan if factory is None else factory
)
return 'ast.AST.ExpressionGreaterThan({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionGreaterThanOrEqual(Expression):
+ class ExpressionGreaterThanOrEqual(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionGreaterThanOrEqual',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionGreaterThanOrEqual if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionIdentifier({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_expression(self, context, precedence):
+ return element.get_text(self[0], 0)
class ExpressionIndex(Expression):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.ExpressionIndex({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, '[')
- element.set_text(self, 2, ']')
+ def translate_expression(self, context, precedence):
+ text = '{0:s}[{1:s}]'.format(
+ self[0].translate_expression(context, 14),
+ self[1].translate_expression(context, 0)
+ )
+ if 14 < precedence:
+ text = '({0:s})'.format(text)
+ return text
class ExpressionIntLiteral(Expression):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.ExpressionIntLiteral({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_expression(self, context, precedence):
+ text = element.get_text(self, 0)
+ if text[:2] in octal_prefix:
+ text = '0o' + text[1:]
+ return text
- class Identifier(Element):
+ class Identifier(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
Identifier if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.Identifier({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 0
- text = element.get_text(self, 0)
- element.set_text(
- self,
- 0,
- context.translate_identifier.get(text, text)
- )
- class ExpressionLeftShiftAssignment(Expression):
+ class ExpressionLeftShiftAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLeftShiftAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionLeftShiftAssignment if factory is None else factory
)
return 'ast.AST.ExpressionLeftShiftAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionLessThan(Expression):
+ class ExpressionLessThan(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLessThan',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionLessThan if factory is None else factory
)
return 'ast.AST.ExpressionLessThan({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionLessThanOrEqual(Expression):
+ class ExpressionLessThanOrEqual(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLessThanOrEqual',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionLessThanOrEqual if factory is None else factory
)
return 'ast.AST.ExpressionLessThanOrEqual({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionLogicalAnd(Expression):
+ class ExpressionLogicalAnd(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLogicalAnd',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionLogicalAnd if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionLogicalAnd({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' and ')
- element.set_text(self, 2, '')
- class ExpressionLogicalNot(Expression):
+ class ExpressionLogicalNot(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLogicalNot',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionLogicalNot if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionLogicalNot({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, 'not ')
- element.set_text(self, 1, '')
- class ExpressionLogicalOr(Expression):
+ class ExpressionLogicalOr(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionLogicalOr',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionLogicalOr if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionLogicalOr({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' or ')
- element.set_text(self, 2, '')
- class ExpressionMinus(Expression):
+ class ExpressionMinus(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionMinus',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionMinus if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionMinus({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '-')
- element.set_text(self, 1, '')
- class ExpressionModulo(Expression):
+ class ExpressionModulo(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionModulo',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionModulo if factory is None else factory
)
return 'ast.AST.ExpressionModulo({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionModuloAssignment(Expression):
+ class ExpressionModuloAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionModuloAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionModuloAssignment if factory is None else factory
)
return 'ast.AST.ExpressionModuloAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionMultiply(Expression):
+ class ExpressionMultiply(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionMultiply',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionMultiply if factory is None else factory
)
return 'ast.AST.ExpressionMultiply({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionMultiplyAssignment(Expression):
+ class ExpressionMultiplyAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionMultiplyAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionMultiplyAssignment if factory is None else factory
)
return 'ast.AST.ExpressionMultiplyAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionNotEqual(Expression):
+ class ExpressionNotEqual(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionNotEqual',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionNotEqual if factory is None else factory
)
return 'ast.AST.ExpressionNotEqual({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionPlus(Expression):
+ class ExpressionPlus(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionPlus',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionPlus if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionPlus({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '+')
- element.set_text(self, 1, '')
- class ExpressionPostDecrement(Expression):
+ class ExpressionPostDecrement(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionPostDecrement',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionPostDecrement if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionPostDecrement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' -= 1')
+ def translate_statement_expression(self, context):
+ return '{0:s} -= 1'.format(self[0].translate_expression(context, 0))
- class ExpressionPostIncrement(Expression):
+ class ExpressionPostIncrement(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionPostIncrement',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionPostIncrement if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionPostIncrement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' += 1')
+ def translate_statement_expression(self, context):
+ return '{0:s} += 1'.format(self[0].translate_expression(context, 0))
- class ExpressionPreDecrement(Expression):
+ class ExpressionPreDecrement(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionPreDecrement',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionPreDecrement if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionPreDecrement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' -= 1')
+ def translate_statement_expression(self, context):
+ return '{0:s} -= 1'.format(self[0].translate_expression(context, 0))
- class ExpressionPreIncrement(Expression):
+ class ExpressionPreIncrement(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionPreIncrement',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionPreIncrement if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionPreIncrement({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- self[0].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, ' += 1')
+ def translate_statement_expression(self, context):
+ return '{0:s} += 1'.format(self[0].translate_expression(context, 0))
- class ExpressionRightShiftAssignment(Expression):
+ class ExpressionRightShiftAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionRightShiftAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionRightShiftAssignment if factory is None else factory
)
return 'ast.AST.ExpressionRightShiftAssignment({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionShiftLeft(Expression):
+ class ExpressionShiftLeft(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionShiftLeft',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionShiftLeft if factory is None else factory
)
return 'ast.AST.ExpressionShiftLeft({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionShiftRight(Expression):
+ class ExpressionShiftRight(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionShiftRight',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionShiftRight if factory is None else factory
)
return 'ast.AST.ExpressionShiftRight({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionSizeOfExpression(Expression):
+ class ExpressionSizeOfExpression(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionSizeOfExpression',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionSizeOfExpression if factory is None else factory
)
return 'ast.AST.ExpressionSizeOfExpression({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionSizeOfType(Expression):
+ class ExpressionSizeOfType(ExpressionUnary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionSizeOfType',
attrib = {},
text = '',
- children = []
+ children = [],
+ unary_operator = '',
+ postfix = False
):
- AST.Expression.__init__(
+ AST.ExpressionUnary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ unary_operator,
+ postfix
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionUnary.copy(
self,
ExpressionSizeOfType if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.ExpressionStringLiteral({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- element.set_text(self, 0, '"')
- for i in range(1, len(self)):
- element.set_text(self, i, '')
- element.set_text(self, len(self), '"')
- class ExpressionSubtract(Expression):
+ class ExpressionSubtract(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionSubtract',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionSubtract if factory is None else factory
)
return 'ast.AST.ExpressionSubtract({0:s})'.format(', '.join(params))
# GENERATE END
- class ExpressionSubtractAssignment(Expression):
+ class ExpressionSubtractAssignment(ExpressionBinary):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
tag = 'AST_ExpressionSubtractAssignment',
attrib = {},
text = '',
- children = []
+ children = [],
+ binary_operator = '',
+ precedence = -1,
+ right_to_left = False
):
- AST.Expression.__init__(
+ AST.ExpressionBinary.__init__(
self,
tag,
attrib,
text,
- children
+ children,
+ binary_operator,
+ precedence,
+ right_to_left
)
def copy(self, factory = None):
- result = AST.Expression.copy(
+ result = AST.ExpressionBinary.copy(
self,
ExpressionSubtractAssignment if factory is None else factory
)
context.top_level = True
context.indent = indent_save
- class FunctionSpecifier(Element):
+ class FunctionSpecifier(element.Element):
# GENERATE ELEMENT(int n) BEGIN
def __init__(
self,
children = [],
n = -1
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
n
)
def serialize(self, ref_list):
- AST.Element.serialize(self, ref_list)
+ element.Element.serialize(self, ref_list)
self.set('n', element.serialize_int(self.n))
def deserialize(self, ref_list):
- AST.Element.deserialize(self, ref_list)
+ element.Element.deserialize(self, ref_list)
self.n = element.deserialize_int(self.get('n', '-1'))
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
FunctionSpecifier if factory is None else factory
)
result.n = self.n
return result
def repr_serialize(self, params):
- AST.Element.repr_serialize(self, params)
+ element.Element.repr_serialize(self, params)
if self.n != -1:
params.append(
'n = {0:s}'.format(repr(self.n))
return 'ast.AST.FunctionSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class GenericAssociation(Element):
+ class GenericAssociation(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
GenericAssociation if factory is None else factory
)
return 'ast.AST.GenericAssociation({0:s})'.format(', '.join(params))
# GENERATE END
- class GenericAssociationList(Element):
+ class GenericAssociationList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
GenericAssociationList if factory is None else factory
)
return 'ast.AST.GenericAssociationList({0:s})'.format(', '.join(params))
# GENERATE END
- class GenericSelection(Element):
+ class GenericSelection(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
GenericSelection if factory is None else factory
)
return 'ast.AST.GenericSelection({0:s})'.format(', '.join(params))
# GENERATE END
- class IdentifierEmpty(Element):
+ class IdentifierEmpty(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
IdentifierEmpty if factory is None else factory
)
return 'ast.AST.IdentifierEmpty({0:s})'.format(', '.join(params))
# GENERATE END
- class IdentifierList(Element):
+ class IdentifierList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
IdentifierList if factory is None else factory
)
return 'ast.AST.IdentifierList({0:s})'.format(', '.join(params))
# GENERATE END
- class InitDeclarator(Element):
+ class InitDeclarator(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
InitDeclarator if factory is None else factory
)
return 'ast.AST.InitDeclarator({0:s})'.format(', '.join(params))
# GENERATE END
- class InitDeclaratorList(Element):
+ class InitDeclaratorList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
InitDeclaratorList if factory is None else factory
)
return 'ast.AST.InitDeclaratorList({0:s})'.format(', '.join(params))
# GENERATE END
- class ParameterDeclaration(Element):
+ class ParameterDeclaration(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
ParameterDeclaration if factory is None else factory
)
return 'ast.AST.ParameterDeclaration({0:s})'.format(', '.join(params))
# GENERATE END
- class ParameterDeclarationList(Element):
+ class ParameterDeclarationList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
ParameterDeclarationList if factory is None else factory
)
return 'ast.AST.ParameterDeclarationList({0:s})'.format(', '.join(params))
# GENERATE END
- class SpecifierQualifierList(Element):
+ class SpecifierQualifierList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
SpecifierQualifierList if factory is None else factory
)
self.repr_serialize(params)
return 'ast.AST.StatementBlock({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 1
- indent_save = context.indent
- context.indent += ' '
- self[0].translate(context)
- context.indent = indent_save
- element.set_text(self, 0, '')
- element.set_text(self, 1, '')
+ def translate_declaration_or_statement(self, context):
+ if len(self[0]):
+ self[0].translate_block_item_list(context)
+ else:
+ context.lines.append('{0:s}pass\n'.format(context.indent))
class StatementBreak(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementBreak({0:s})'.format(', '.join(params))
# GENERATE END
-
+ def translate_declaration_or_statement(self, context):
+ context.lines.append('{0:s}break\n'.format(context.indent))
+
class StatementCase(Statement):
# GENERATE ELEMENT() BEGIN
def __init__(
self.repr_serialize(params)
return 'ast.AST.StatementContinue({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 0
- if isinstance(enclosing_loop, StatementDoWhile):
- self.append(enclosing_loop[1].copy())
- self[0].translate(context)
- element.set_text(self, 0, '{0:s}if '.format(context.indent))
- element.set_text(
- self,
- 0,
- ':\n{0:s} continue\n{1:s}break\n'.format(
+ def translate_declaration_or_statement(self, context):
+ enclosing_loop_save = context.enclosing_loop
+ context.enclosing_loop = None
+ if isinstance(enclosing_loop_save, AST.StatementDoWhile):
+ AST.StatementIfElse(
+ children = [
+ enclosing_loop_save[1],
+ AST.StatementContinue(),
+ AST.StatementBreak()
+ ]
+ ).translate_declaration_or_statement(context)
+ elif isinstance(enclosing_loop_save, AST.StatementFor):
+ context.lines.append(
+ '{0:s}{1:s}\n{2:s}continue\n'.format(
context.indent,
+ enclosing_loop_save[2].translate_statement_expression(context),
context.indent
)
)
- elif isinstance(enclosing_loop, StatementFor):
- self.append(enclosing_loop[2].copy())
- self[0].translate(context)
- element.set_text(self, 0, '')
- element.set_text(self, 1, '{0:s}continue\n'.format(context.indent))
else:
- element.set_text(self, 0, '{0:s}continue\n'.format(context.indent))
+ context.lines.append('{0:s}continue\n'.format(context.indent))
+ context.enclosing_loop = enclosing_loop_save
class StatementDefault(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementDoWhile({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
+ def translate_declaration_or_statement(self, context):
+ context.lines.append('{0:s}while True:\n'.format(context.indent))
+ indent_save = context.indent
+ context.indent += ' '
enclosing_loop_save = context.enclosing_loop
context.enclosing_loop = self
- self[0] = AST.StatementBlock(
+ self[0].translate_declaration_or_statement(context)
+ context.enclosing_loop = enclosing_loop_save
+ AST.StatementIf(
children = [
- AST.BlockItemList(
- children = [self[0]]
- )
+ AST.ExpressionLogicalNot(
+ children = [
+ self[1]
+ ],
+ unary_operator = 'not '
+ ),
+ AST.StatementBreak()
]
- )
- self[0].translate(context)
- context.enclosing_loop = enclosing_loop_save
- self[1].translate(context)
- element.set_text(self, 0, '{0:s}while True:\n'.format(context.indent))
- element.set_text(self, 1, '{0:s} if not ('.format(context.indent))
- element.set_text(self, 2, '):\n{0:s} break\n'.format(context.indent))
+ ).translate_declaration_or_statement(context)
+ context.indent = indent_save
class StatementExpression(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementExpression({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_declaration_or_statement(self, context):
+ context.lines.append(
+ '{0:s}{1:s}\n'.format(
+ context.indent,
+ self[0].translate_statement_expression(context)
+ )
+ )
class StatementFor(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementFor({0:s})'.format(', '.join(params))
# GENERATE END
+ def translate_declaration_or_statement(self, context):
+ self[0].translate_declaration_or_statement(context)
+ context.lines.append(
+ '{0:s}while {1:s}:\n'.format(
+ context.indent,
+ self[1].translate_expression(context, 0)
+ )
+ )
+ indent_save = context.indent
+ context.indent += ' '
+ enclosing_loop_save = context.enclosing_loop
+ context.enclosing_loop = self
+ self[3].translate_declaration_or_statement(context)
+ context.enclosing_loop = enclosing_loop_save
+ context.lines.append(
+ '{0:s}{1:s}\n'.format(
+ context.indent,
+ self[2].translate_statement_expression(context)
+ )
+ )
+ context.indent = indent_save
class StatementGoto(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementIf({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
- self[1] = AST.StatementBlock(
- children = [
- AST.BlockItemList(
- children = [self[1]]
- )
- ]
+ def translate_declaration_or_statement(self, context):
+ context.lines.append(
+ '{0:s}if {1:s}:\n'.format(
+ context.indent,
+ self[0].translate_expression(context, 0)
+ )
)
- self[1].translate(context)
- element.set_text(self, 0, '{0:s}if '.format(context.indent))
- element.set_text(self, 1, ':\n')
- element.set_text(self, 2, '')
+ indent_save = context.indent
+ context.indent += ' '
+ self[1].translate_declaration_or_statement(context)
+ context.indent = indent_save
class StatementIfElse(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementIfElse({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 3
- self[0].translate(context)
- self[1] = AST.StatementBlock(
- children = [
- AST.BlockItemList(
- children = [self[1]]
- )
- ]
- )
- self[1].translate(context)
- self[2] = AST.StatementBlock(
- children = [
- AST.BlockItemList(
- children = [self[2]]
- )
- ]
+ def translate_declaration_or_statement(self, context):
+ context.lines.append(
+ '{0:s}if {1:s}:\n'.format(
+ context.indent,
+ self[0].translate_expression(context, 0)
+ )
)
- self[2].translate(context)
- element.set_text(self, 0, '{0:s}if '.format(context.indent))
- element.set_text(self, 1, ':\n')
- element.set_text(self, 2, '{0:s}else:\n'.format(context.indent))
- element.set_text(self, 3, '')
+ indent_save = context.indent
+ context.indent += ' '
+ self[1].translate_declaration_or_statement(context)
+ context.lines.append('{0:s}else:\n'.format(indent_save))
+ self[2].translate_declaration_or_statement(context)
+ context.indent = indent_save
class StatementLabel(Statement):
# GENERATE ELEMENT() BEGIN
self.repr_serialize(params)
return 'ast.AST.StatementWhile({0:s})'.format(', '.join(params))
# GENERATE END
- def translate(self, context):
- assert len(self) == 2
- self[0].translate(context)
+ def translate_declaration_or_statement(self, context):
+ context.lines.append(
+ '{0:s}while {1:s}:\n'.format(
+ context.indent,
+ self[0].translate_expression(context, 0)
+ )
+ )
+ indent_save = context.indent
+ context.indent += ' '
enclosing_loop_save = context.enclosing_loop
context.enclosing_loop = self
- self[1] = AST.StatementBlock(
- children = [
- AST.BlockItemList(
- children = [self[1]]
- )
- ]
- )
- self[1].translate(context)
+ self[1].translate_declaration_or_statement(context)
context.enclosing_loop = enclosing_loop_save
- element.set_text(self, 0, '{0:s}while '.format(context.indent))
- element.set_text(self, 1, ':\n')
- element.set_text(self, 2, '')
+ context.indent = indent_save
- class StaticAssertDeclaration(Element):
+ class StaticAssertDeclaration(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StaticAssertDeclaration if factory is None else factory
)
return 'ast.AST.StaticAssertDeclaration({0:s})'.format(', '.join(params))
# GENERATE END
- class StorageClassSpecifier(Element):
+ class StorageClassSpecifier(element.Element):
# GENERATE ELEMENT(int n) BEGIN
def __init__(
self,
children = [],
n = -1
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
n
)
def serialize(self, ref_list):
- AST.Element.serialize(self, ref_list)
+ element.Element.serialize(self, ref_list)
self.set('n', element.serialize_int(self.n))
def deserialize(self, ref_list):
- AST.Element.deserialize(self, ref_list)
+ element.Element.deserialize(self, ref_list)
self.n = element.deserialize_int(self.get('n', '-1'))
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StorageClassSpecifier if factory is None else factory
)
result.n = self.n
return result
def repr_serialize(self, params):
- AST.Element.repr_serialize(self, params)
+ element.Element.repr_serialize(self, params)
if self.n != -1:
params.append(
'n = {0:s}'.format(repr(self.n))
return 'ast.AST.StorageClassSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class StructDeclaration(Element):
+ class StructDeclaration(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StructDeclaration if factory is None else factory
)
return 'ast.AST.StructDeclaration({0:s})'.format(', '.join(params))
# GENERATE END
- class StructDeclarationList(Element):
+ class StructDeclarationList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StructDeclarationList if factory is None else factory
)
return 'ast.AST.StructDeclarationList({0:s})'.format(', '.join(params))
# GENERATE END
- class StructDeclarator(Element):
+ class StructDeclarator(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StructDeclarator if factory is None else factory
)
return 'ast.AST.StructDeclarator({0:s})'.format(', '.join(params))
# GENERATE END
- class StructDeclaratorList(Element):
+ class StructDeclaratorList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StructDeclaratorList if factory is None else factory
)
return 'ast.AST.StructDeclaratorList({0:s})'.format(', '.join(params))
# GENERATE END
- class StructSpecifier(Element):
+ class StructSpecifier(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
StructSpecifier if factory is None else factory
)
return 'ast.AST.StructSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class TypeName(Element):
+ class TypeName(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TypeName if factory is None else factory
)
return 'ast.AST.TypeName({0:s})'.format(', '.join(params))
# GENERATE END
- class TypeQualifier(Element):
+ class TypeQualifier(element.Element):
# GENERATE ELEMENT(int n) BEGIN
def __init__(
self,
children = [],
n = -1
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
n
)
def serialize(self, ref_list):
- AST.Element.serialize(self, ref_list)
+ element.Element.serialize(self, ref_list)
self.set('n', element.serialize_int(self.n))
def deserialize(self, ref_list):
- AST.Element.deserialize(self, ref_list)
+ element.Element.deserialize(self, ref_list)
self.n = element.deserialize_int(self.get('n', '-1'))
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TypeQualifier if factory is None else factory
)
result.n = self.n
return result
def repr_serialize(self, params):
- AST.Element.repr_serialize(self, params)
+ element.Element.repr_serialize(self, params)
if self.n != -1:
params.append(
'n = {0:s}'.format(repr(self.n))
return 'ast.AST.TypeQualifier({0:s})'.format(', '.join(params))
# GENERATE END
- class TypeQualifierList(Element):
+ class TypeQualifierList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TypeQualifierList if factory is None else factory
)
return 'ast.AST.TypeQualifierList({0:s})'.format(', '.join(params))
# GENERATE END
- class TypeQualifierOrStaticList(Element):
+ class TypeQualifierOrStaticList(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TypeQualifierOrStaticList if factory is None else factory
)
return 'ast.AST.TypeQualifierOrStaticList({0:s})'.format(', '.join(params))
# GENERATE END
- class TypeSpecifier(Element):
+ class TypeSpecifier(element.Element):
# GENERATE ELEMENT(int n) BEGIN
def __init__(
self,
children = [],
n = -1
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
n
)
def serialize(self, ref_list):
- AST.Element.serialize(self, ref_list)
+ element.Element.serialize(self, ref_list)
self.set('n', element.serialize_int(self.n))
def deserialize(self, ref_list):
- AST.Element.deserialize(self, ref_list)
+ element.Element.deserialize(self, ref_list)
self.n = element.deserialize_int(self.get('n', '-1'))
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TypeSpecifier if factory is None else factory
)
result.n = self.n
return result
def repr_serialize(self, params):
- AST.Element.repr_serialize(self, params)
+ element.Element.repr_serialize(self, params)
if self.n != -1:
params.append(
'n = {0:s}'.format(repr(self.n))
return 'ast.AST.TypeSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class UnionSpecifier(Element):
+ class UnionSpecifier(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
UnionSpecifier if factory is None else factory
)
return 'ast.AST.UnionSpecifier({0:s})'.format(', '.join(params))
# GENERATE END
- class TranslationUnit(Element):
+ class TranslationUnit(element.Element):
# GENERATE ELEMENT() BEGIN
def __init__(
self,
text = '',
children = []
):
- AST.Element.__init__(
+ element.Element.__init__(
self,
tag,
attrib,
children
)
def copy(self, factory = None):
- result = AST.Element.copy(
+ result = element.Element.copy(
self,
TranslationUnit if factory is None else factory
)
tag_to_class = {
'AST': AST,
'AST_Text': AST.Text,
- 'AST_Element': AST.Element,
'AST_DeclarationOrStatement': AST.DeclarationOrStatement,
'AST_Statement': AST.Statement,
'AST_Declarator': AST.Declarator,
'AST_Expression': AST.Expression,
+ 'AST_ExpressionUnary': AST.ExpressionUnary,
+ 'AST_ExpressionBinary': AST.ExpressionBinary,
'AST_Type': AST.Type,
'AST_TypeVoid': AST.TypeVoid,
'AST_TypeInt': AST.TypeInt,