public override void Emit(SourceBuilder sourceCode) { if (InParallelizedBody) { sourceCode.AppendFrontFormat("{0}.{1} match = parallelTaskMatches[threadId].GetNextUnfilledPosition();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); } else { sourceCode.AppendFrontFormat("{0}.{1} match = matches.GetNextUnfilledPosition();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); } // emit match building operations MatchBuildingOperations.Emit(sourceCode); if (InParallelizedBody) { sourceCode.AppendFront("match.IterationNumber = currentIterationNumber;\n"); sourceCode.AppendFront("parallelTaskMatches[threadId].PositionWasFilledFixIt();\n"); } else { sourceCode.AppendFront("matches.PositionWasFilledFixIt();\n"); } }
public override void Dump(SourceBuilder builder) { builder.AppendFrontFormat("LeafSubpatternMatched {0}\n", IsIteratedNullMatch ? "IteratedNullMatch " : ""); if (MatchBuildingOperations != null) { builder.Indent(); MatchBuildingOperations.Dump(builder); builder.Unindent(); } }
public override void Dump(SourceBuilder builder) { builder.AppendFront("PositivePatternMatched \n"); if (InParallelizedBody) { builder.AppendFront("InParallelizedBody \n"); } if (MatchBuildingOperations != null) { builder.Indent(); MatchBuildingOperations.Dump(builder); builder.Unindent(); } }
public override void Emit(SourceBuilder sourceCode) { sourceCode.AppendFront("Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();\n"); sourceCode.AppendFront("foundPartialMatches.Add(currentFoundPartialMatch);\n"); sourceCode.AppendFrontFormat("{0}.{1} match = new {0}.{1}();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); if (IsIteratedNullMatch) { sourceCode.AppendFront("match._isNullMatch = true; // null match of iterated pattern\n"); } else { MatchBuildingOperations.Emit(sourceCode); // emit match building operations } sourceCode.AppendFront("currentFoundPartialMatch.Push(match);\n"); }
public override void Dump(SourceBuilder builder) { builder.AppendFront("PatternAndSubpatternsMatched "); if (InParallelizedBody) { builder.Append("InParallelizedBody "); } switch (Type) { case PatternAndSubpatternsMatchedType.Action: builder.Append("Action \n"); break; case PatternAndSubpatternsMatchedType.Iterated: builder.Append("Iterated \n"); break; case PatternAndSubpatternsMatchedType.IteratedNullMatch: builder.Append("IteratedNullMatch \n"); break; case PatternAndSubpatternsMatchedType.SubpatternOrAlternative: builder.Append("SubpatternOrAlternative \n"); break; default: builder.Append("INTERNAL ERROR\n"); break; } if (MatchBuildingOperations != null) { builder.Indent(); MatchBuildingOperations.Dump(builder); builder.Unindent(); } }
public override void Emit(SourceBuilder sourceCode) { if (Type == PatternAndSubpatternsMatchedType.Iterated) { sourceCode.AppendFront("patternFound = true;\n"); } if (Type != PatternAndSubpatternsMatchedType.Action) { if (sourceCode.CommentSourceCode) { sourceCode.AppendFront("// subpatterns/alternatives were found, extend the partial matches by our local match object\n"); } sourceCode.AppendFront("foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)\n"); sourceCode.AppendFront("{\n"); sourceCode.Indent(); sourceCode.AppendFrontFormat("{0}.{1} match = new {0}.{1}();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); if (Type == PatternAndSubpatternsMatchedType.IteratedNullMatch) { sourceCode.AppendFront("match._isNullMatch = true; // null match of iterated pattern\n"); } MatchBuildingOperations.Emit(sourceCode); // emit match building operations sourceCode.AppendFront("currentFoundPartialMatch.Push(match);\n"); sourceCode.Unindent(); sourceCode.AppendFront("}\n"); } else // top-level pattern with subpatterns/alternatives { if (sourceCode.CommentSourceCode) { sourceCode.AppendFront("// subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it\n"); } sourceCode.AppendFront("foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)\n"); sourceCode.AppendFront("{\n"); sourceCode.Indent(); if (InParallelizedBody) { sourceCode.AppendFrontFormat("{0}.{1} match = parallelTaskMatches[threadId].GetNextUnfilledPosition();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); } else { sourceCode.AppendFrontFormat("{0}.{1} match = matches.GetNextUnfilledPosition();\n", RulePatternClassName, NamesOfEntities.MatchClassName(PatternName)); } MatchBuildingOperations.Emit(sourceCode); // emit match building operations if (InParallelizedBody) { sourceCode.AppendFront("match.IterationNumber = currentIterationNumber;\n"); sourceCode.AppendFront("parallelTaskMatches[threadId].PositionWasFilledFixIt();\n"); } else { sourceCode.AppendFront("matches.PositionWasFilledFixIt();\n"); } sourceCode.Unindent(); sourceCode.AppendFront("}\n"); sourceCode.AppendFront("matchesList.Clear();\n"); } }