package org.whole.examples.lang.imp.codebase; import org.whole.examples.lang.imp.builders.IImpBuilder; import org.whole.examples.lang.imp.model.FunctionDeclaration; import org.whole.examples.lang.imp.reflect.ImpLanguageKit; import org.whole.lang.builders.IBuilderOperation; import org.whole.lang.commons.builders.ICommonsBuilder; import org.whole.lang.commons.reflect.CommonsLanguageKit; import org.whole.lang.templates.AbstractTemplateFactory; /** * @generator Whole */ public class Factorial extends AbstractTemplateFactory<FunctionDeclaration> { public void apply(IBuilderOperation op) { IImpBuilder b0 = (IImpBuilder) op.wGetBuilder(ImpLanguageKit.URI); ICommonsBuilder cb = (ICommonsBuilder) op.wGetBuilder(CommonsLanguageKit.URI); b0.FunctionDeclaration_(); b0.PrimitiveType("void"); b0.Name("testFactorial"); cb.Resolver(); b0.BlockStatement_(4); b0.FunctionDeclaration_(); b0.PrimitiveType("int"); b0.Name("ifact"); b0.Parameters_(1); b0.Parameter_(); b0.PrimitiveType("int"); b0.Name("n"); b0._Parameter(); b0._Parameters(); b0.BlockStatement_(3); b0.VariableDeclaration_(); b0.PrimitiveType("int"); b0.Name("result"); b0.IntLiteral(1); b0._VariableDeclaration(); b0.WhileStatement_(); b0.GreaterThan_(); b0.NameExpression("n"); b0.IntLiteral(0); b0._GreaterThan(); b0.BlockStatement_(2); b0.ExpressionStatement_(); b0.AssignmentExpression_(); b0.Name("result"); b0.Multiplication_(); b0.NameExpression("result"); b0.NameExpression("n"); b0._Multiplication(); b0._AssignmentExpression(); b0._ExpressionStatement(); b0.ExpressionStatement_(); b0.AssignmentExpression_(); b0.Name("n"); b0.Subtraction_(); b0.NameExpression("n"); b0.IntLiteral(1); b0._Subtraction(); b0._AssignmentExpression(); b0._ExpressionStatement(); b0._BlockStatement(); b0._WhileStatement(); b0.ReturnStatement_(); b0.NameExpression("result"); b0._ReturnStatement(); b0._BlockStatement(); b0._FunctionDeclaration(); b0.FunctionDeclaration_(); b0.PrimitiveType("int"); b0.Name("rfact"); b0.Parameters_(1); b0.Parameter_(); b0.PrimitiveType("int"); b0.Name("n"); b0._Parameter(); b0._Parameters(); b0.IfElseStatement_(); b0.LessOrEquals_(); b0.NameExpression("n"); b0.IntLiteral(1); b0._LessOrEquals(); b0.ReturnStatement_(); b0.IntLiteral(1); b0._ReturnStatement(); b0.ReturnStatement_(); b0.Multiplication_(); b0.NameExpression("n"); b0.FunctionInvocationExpression_(); b0.NameExpression("rfact"); b0.Arguments_(1); b0.Subtraction_(); b0.NameExpression("n"); b0.IntLiteral(1); b0._Subtraction(); b0._Arguments(); b0._FunctionInvocationExpression(); b0._Multiplication(); b0._ReturnStatement(); b0._IfElseStatement(); b0._FunctionDeclaration(); b0.PrintlnStatement_(); b0.FunctionInvocationExpression_(); b0.NameExpression("ifact"); b0.Arguments_(1); b0.IntLiteral(4); b0._Arguments(); b0._FunctionInvocationExpression(); b0._PrintlnStatement(); b0.PrintlnStatement_(); b0.FunctionInvocationExpression_(); b0.NameExpression("rfact"); b0.Arguments_(1); b0.IntLiteral(3); b0._Arguments(); b0._FunctionInvocationExpression(); b0._PrintlnStatement(); b0._BlockStatement(); b0._FunctionDeclaration(); } }