void callbackInstructionParameterString(Parser parser, Token currentToken) { string stringContent = currentToken.contentString; ulong uniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <pattern.Decoration> stringPattern = Conversion.convert(stringContent, uniqueId); PatternManipulation.append(topPattern, stringPattern); }
void callbackAddString(Parser parser, Token currentToken) { string @string = currentToken.contentString; ulong stringUniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <Decoration> stringPattern = Conversion.convert(@string, stringUniqueId); PatternManipulation.append(topPattern, stringPattern); }
void callbackAddVariable(Parser parser, Token currentToken) { string variableName = currentToken.contentString; ulong uniqueId = patternSymbolContext.lookupOrCreateUniqueIdForVariable(variableName); Pattern <pattern.Decoration> variablePattern = Pattern <pattern.Decoration> .makeVariable(uniqueId); PatternManipulation.append(topPattern, variablePattern); }
void callbackAddLong(Parser parser, Token currentToken) { ulong uniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <pattern.Decoration> numberPattern = Pattern <pattern.Decoration> .makeDecoratedValue(uniqueId); numberPattern.decoration = new Decoration(); numberPattern.decoration.type = Decoration.EnumType.VALUE; numberPattern.decoration.value = (long)currentToken.contentNumber; PatternManipulation.append(topPattern, numberPattern); }
//void callbackExitPattern(AiThisAndThat.lang.Parser parser, Token currentToken) { // topPatternStack.RemoveAt(topPatternStack.Count-1); // TODO< rewrite to pop > //} void callbackAddSymbol(Parser parser, Token currentToken) { string symbolName = currentToken.contentString; Tuple <ulong, ulong> symbolIdAndUniqueId = patternSymbolContext.lookupOrCreateSymbolIdAndUniqueIdForName(symbolName); ulong symbolId = symbolIdAndUniqueId.Item1; ulong uniqueId = symbolIdAndUniqueId.Item2; Pattern <pattern.Decoration> symbolPattern = Pattern <pattern.Decoration> .makeSymbol(symbolId, uniqueId); PatternManipulation.append(topPattern, symbolPattern); }
void callbackEnterPattern(Parser parser, Token currentToken) { ulong uniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <pattern.Decoration> interpretationPattern = Pattern <pattern.Decoration> .makeBranch(uniqueId); interpretationPattern.referenced = new Pattern <pattern.Decoration> [0]; if (topPatternStack.Count != 0) { PatternManipulation.append(topPattern, interpretationPattern); } topPatternStack.Add(interpretationPattern); // TODO< rewrite to push > }
void callbackEnterInterpretationPattern(Parser parser, Token currentToken) { ulong uniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <pattern.Decoration> interpretationPattern = Pattern <pattern.Decoration> .makeBranch(uniqueId); interpretationPattern.decoration = new Decoration(); interpretationPattern.referenced = new Pattern <pattern.Decoration> [0]; if (ruleType == EnumRuleType.MATCH) { interpretationPattern.decoration.type = Decoration.EnumType.VARIABLETEMPLATEMATCHING; interpretationPattern.type = Pattern <Decoration> .EnumType.BRANCH; } else if (ruleType == EnumRuleType.TUPLE2) { interpretationPattern.decoration.type = Decoration.EnumType.TUPLE2; interpretationPattern.type = Pattern <Decoration> .EnumType.BRANCH; } else if (ruleType == EnumRuleType.SEQUENCE) { interpretationPattern.decoration.type = Decoration.EnumType.SEQUENCE; interpretationPattern.type = Pattern <Decoration> .EnumType.BRANCH; } else if (ruleType == EnumRuleType.LOOP) { interpretationPattern.decoration.type = Decoration.EnumType.LOOP; interpretationPattern.type = Pattern <Decoration> .EnumType.BRANCH; } else { throw new Exception("Internal error"); // invalid ruleType, is a bug } // special case because added pattern can be first pattern if (topPatternStack.Count != 0) { PatternManipulation.append(topPattern, interpretationPattern); } topPatternStack.Add(interpretationPattern); // TODO< rewrite to push > }
void callbackEnterInstructionAndInstructionName(Parser parser, Token currentToken) { string calledFunctionName = currentToken.contentString; ulong uniqueId = patternSymbolContext.returnNewUniqueId(); Pattern <pattern.Decoration> instructionPattern = Pattern <pattern.Decoration> .makeBranch(uniqueId); instructionPattern.decoration = new Decoration(); instructionPattern.decoration.type = Decoration.EnumType.EXEC; instructionPattern.referenced = new Pattern <pattern.Decoration> [1]; ulong functionNamePatternUniqueId = patternSymbolContext.returnNewUniqueId(); instructionPattern.referenced[0] = Conversion.convert(calledFunctionName, functionNamePatternUniqueId); PatternManipulation.append(topPattern, instructionPattern); topPatternStack.Add(instructionPattern); // TODO< rewrite to push > }