/// <summary> /// Translate the given parse tree node into a GMac frame /// </summary> /// <param name="context"></param> /// <param name="node"></param> /// <returns></returns> public static GMacFrame Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(RoleNames.Frame, node); var translator = new GMacFrameGenerator();//new GMacFrameGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); //MasterPool.Release(translator); var frame = translator._generatedFrame; if (frame == null) { return(null); } if (frame.BaseFrame != null) { DefineFrameDefaultSymbols(frame.BaseFrame, context); } DefineFrameDefaultSymbols(frame, context); return(frame); }
public static LanguageSymbol Translate_Direct(GMacSymbolTranslatorContext context, ParseTreeNode node, TrimmedList <string> qualList) { var valAccess = Translate(context, node, false, qualList); return (valAccess.IsFullAccess ? valAccess.RootSymbol : context.CompilationLog.RaiseGeneratorError <LanguageSymbol>("Expecting a direct r-value", node)); }
private void SetContext(TrimmedList <string> qualList, GMacSymbolTranslatorContext context, bool isLvalue, bool followScopeChain) { SetContext(context); _isLValue = isLvalue; _followScopeChain = followScopeChain; _qualList = new TrimmedList <string>(qualList); _generatedValueAccess = null; }
public static ILanguageType Translate_Direct_LanguageType(GMacSymbolTranslatorContext context, ParseTreeNode node) { var valAccess = Translate(context, node, false); if (valAccess.IsFullAccess && valAccess.RootSymbol is ILanguageType) { return((ILanguageType)valAccess.RootSymbol); } return(context.CompilationLog.RaiseGeneratorError <ILanguageType>("Expecting a language type", node)); }
public static LanguageSymbol Translate_Direct(GMacSymbolTranslatorContext context, ParseTreeNode node, string acceptedRoleName) { var valAccess = Translate(context, node, false); if (valAccess.IsFullAccess && acceptedRoleName == valAccess.RootSymbol.SymbolRoleName) { return(valAccess.RootSymbol); } return(context.CompilationLog.RaiseGeneratorError <SymbolWithScope>("Expecting a direct symbol with role: " + acceptedRoleName, node)); }
internal static GMacAst Translate(GMacSymbolTranslatorContext context, bool translateNamespaceFirst = true) { var translator = new GMacAstGenerator() { _translateNamespaceFirst = translateNamespaceFirst }; translator.SetContext(context); translator.Translate(); var result = translator._generatedGMacSymbolTable; //MasterPool.Release(translator); return(result); }
public static List <LanguageCommand> Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(node); var translator = new GMacCommandGenerator();//new GMacCommandGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedCommands; //MasterPool.Release(translator); return(result); }
public static List <GMacMacro> Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(RoleNames.MacroTemplate, node); var translator = new GMacTemplatesImplementationGenerator();//new GMacTemplatesImplementationGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedMacros; //MasterPool.Release(translator); return(result); }
public static GMacMultivectorTransform Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(RoleNames.Transform, node); var translator = new GMacTransformGenerator();//new GMacTransformGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedTransform; //MasterPool.Release(translator); return(result); }
public static GMacStructure Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(RoleNames.Structure, node); var translator = new GMacStructureGenerator();//new GMacStructureGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedStructure; //MasterPool.Release(translator); return(result); }
/// <summary> /// Translate the boolean pattern of a GMac frame subspace /// </summary> /// <param name="context"></param> /// <param name="node"></param> /// <param name="frame"></param> /// <returns></returns> public static MutableBooleanPattern Translate(GMacSymbolTranslatorContext context, ParseTreeNode node, GMacFrame frame) { context.PushState(node); var translator = new GMacFrameSubspacePatternGenerator();//new GMacFrameSubspacePatternGenerator(context, frame); translator.SetContext(context, frame); translator.Translate(); context.PopState(); var result = translator._generatedBooleanPattern; //MasterPool.Release(translator); return(result); }
//public static bool TryTranslate_LValue(GMacSymbolTranslatorContext context, ParseTreeNode node, out LanguageValueAccess varAccess) //{ // var qualList = GenUtils.Translate_Qualified_Identifier(node); // LanguageSymbol symbol; // var flag = // context // .OpenedDistinctScopes() // .LookupSymbol(qualList.FirstItem, out symbol); // if (flag == false || (symbol is SymbolLValue) == false) // { // varAccess = null; // return false; // } // varAccess = LanguageValueAccess.Create(symbol); // return true; //} public static LanguageValueAccess Translate(GMacSymbolTranslatorContext context, ParseTreeNode node, bool isLvalue, TrimmedList <string> qualList) { context.PushState(node); var translator = new GMacValueAccessGenerator();//new GMacValueAccessGenerator(qualList, context, isLvalue, true); translator.SetContext(qualList, context, isLvalue, true); translator.Translate(); context.PopState(); var result = translator._generatedValueAccess; //MasterPool.Release(translator); return(result); }
public static CompositeExpression Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(node); var translator = new GMacExpressionCompositeGenerator();//new GMacExpressionCompositeGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedExpression; //MasterPool.Release(translator); return(result); }
public static LanguageSymbol Translate_Direct(GMacSymbolTranslatorContext context, ParseTreeNode node, IEnumerable <string> acceptedRoleNames) { var acceptedRoleNamesArray = acceptedRoleNames.ToArray(); var valAccess = Translate(context, node, false); if (valAccess.IsFullAccess && acceptedRoleNamesArray.Contains(valAccess.RootSymbol.SymbolRoleName)) { return(valAccess.RootSymbol); } var acceptedText = acceptedRoleNamesArray.Aggregate( new StringBuilder(), (s, roleName) => s.Append(roleName).Append(", "), s => { s.Length -= 2; return(s.ToString()); } ); return(context.CompilationLog.RaiseGeneratorError <SymbolWithScope>("Expecting a direct symbol with role: " + acceptedText, node)); }
public static GMacMacro Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { //var eventId = context.CompilationLog.TimeCounter.StartEvent("macro gen"); context.PushState(RoleNames.Macro, node); var translator = new GMacMacroGenerator();//new GMacMacroGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); var result = translator._generatedMacro; //MasterPool.Release(translator); //context.CompilationLog.TimeCounter.EndEvent(eventId); return(result); }
private static void DefineFrameDefaultSymbols(GMacFrame frame, GMacSymbolTranslatorContext context) { if (GMacCompilerFeatures.DefineFrameDefaultSymbols == false) { return; } if (frame.DefaultSymbolsReady) { return; } var gmacCode = FrameLibrary.Generate(new AstFrame(frame)); //context.CompilationLog.Trace.AppendLineAtNewLine("Generating default frame objects GMacDSL code"); //context.CompilationLog.Trace.AppendLineAtNewLine(gmacCode); context.ParentProjectCompiler.CompileGeneratedCode(frame.SymbolAccessName + ".default.gmac", gmacCode); frame.DefaultSymbolsReady = true; }
private static bool TryTranslate_LValue(GMacSymbolTranslatorContext context, ParseTreeNode node, out LanguageValueAccess varAccess) { var qualList = GenUtils.Translate_Qualified_Identifier(node); LanguageSymbol symbol; var flag = context .OpenedDistinctScopes() .LookupSymbol(qualList.FirstItem, out symbol); if (flag == false || (symbol is SymbolLValue) == false) { varAccess = null; return(false); } varAccess = LanguageValueAccess.Create(symbol); return(true); }
public static ILanguageExpression Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(node); var translator = new GMacExpressionGenerator();//new GMacExpressionGenerator(context); var basicExprGen = new GMacExpressionBasicGenerator(); basicExprGen.SetContext(context); translator.SetContext(basicExprGen); translator.Translate(); context.PopState(); var result = translator._generatedExpression; //MasterPool.Release(basicExprGen); //MasterPool.Release(translator); return(result); }
public static LanguageValueAccess Translate_LValue_MacroParameter(GMacSymbolTranslatorContext context, ParseTreeNode node, GMacMacro macro) { context.PushState(macro.ChildSymbolScope, node); var translator = new GMacValueAccessGenerator();//new GMacValueAccessGenerator(context, true, false); translator.SetContext(context, true, false); translator.Translate(); context.PopState(); if (translator._generatedValueAccess.RootSymbol is SymbolProcedureParameter) { var result = translator._generatedValueAccess; //MasterPool.Release(translator); return(result); } return(context.CompilationLog.RaiseGeneratorError <LanguageValueAccess>("Expecting a macro parameter", node)); }
/// <summary> /// Translate the given parse tree node into a GMac namespace /// </summary> /// <param name="context"></param> /// <param name="node"></param> /// <returns></returns> public static GMacNamespace Translate(GMacSymbolTranslatorContext context, ParseTreeNode node) { context.PushState(RoleNames.Namespace, node); var translator = new GMacNamespaceGenerator();//new GMacNamespaceGenerator(context); translator.SetContext(context); translator.Translate(); context.PopState(); //Clear all opened scopes context.ClearOpenedScopes(); //After translation is completed change the current scope to the translated namespace to make it the current namespace context.SetActiveState(translator._generatedNamespace.ChildSymbolScope, RoleNames.Namespace, node); var result = translator._generatedNamespace; //MasterPool.Release(translator); return(result); }
//public override void ResetOnAcquire() //{ // base.ResetOnAcquire(); // _operand1 = null; // _operand2 = null; // _atomicOperand1 = null; // _atomicOperand2 = null; // _resultType = null; //} public void SetContext(GMacSymbolTranslatorContext context) { SetContext((SymbolTranslatorContext)context); }
//public override void ResetOnAcquire() //{ // base.ResetOnAcquire(); // _frame = null; // _generatedBooleanPattern = null; //} private void SetContext(GMacSymbolTranslatorContext context, GMacFrame frame) { SetContext(context); _frame = frame; _generatedBooleanPattern = new MutableBooleanPattern(frame.GaSpaceDimension, false); }
//public override void ResetOnAcquire() //{ // base.ResetOnAcquire(); // _generatedGMacSymbolTable = null; //} private void SetContext(GMacSymbolTranslatorContext context) { SetContext((SymbolTranslatorContext)context); _generatedGMacSymbolTable = context.GMacRootAst; }