示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        //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);
        }
示例#6
0
        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 >
        }
示例#7
0
        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 >
        }
示例#8
0
        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 >
        }