Example #1
0
        bool ParseNestable(string termToken, bool eofOk, CodeStringBuilder sig)
        {
            while (_parser.Read())
            {
                sig.Append(_parser);
                if (_parser.TokenText == termToken) return true;
                else if (_parser.TokenText == "(") ParseNestable(")", eofOk, sig);
                else if (_parser.TokenText == "{") ParseNestable("}", eofOk, sig);
                else if (_parser.TokenText == "[") ParseNestable("]", eofOk, sig);
            }

            return eofOk;
        }
Example #2
0
        bool ProcessFunction()
        {
            var startPos = _parser.Position;
            var retVal = false;
            try
            {
                var sig = new CodeStringBuilder();

                // Function name
                if (!_parser.Read() || _parser.TokenType != TokenParser.TokenType.Word) return false;
                var funcName = _parser.TokenText;
                var funcStartPos = _parser.TokenStartPostion;
                sig.Append(_parser);

                // Exclude probe keywords
                switch (funcName)
                {
                    case "and":
                    case "char":
                    case "enum":
                    case "numeric":
                    case "oldvalue":
                    case "or":
                    case "else":
                    case "for":
                    case "if":
                    case "select":
                    case "switch":
                    case "while":
                        return false;
                }

                // Next char should be '(' - start of argument brackets
                if (!_parser.Read() || _parser.TokenText != "(") return false;
                sig.Append(_parser);
                if (!ParseNestable(")", false, sig)) return false;

                // Optional attributes.
                while (_parser.Read())
                {
                    if (_parser.TokenText == "{") break;

                    //sig.Append(_parser);

                    switch (_parser.TokenText)
                    {
                        case "(":
                            ParseNestable(")", false, sig);
                            break;
                        case "[":
                            ParseNestable("]", false, sig);
                            break;
                        case ";":
                        case ")":
                        case "]":
                        case "}":
                            return false;
                    }
                }

                // Add the function to the list
                AddFunction(funcName, funcStartPos.LineNum, _parser.Position.LineNum, sig.ToString());

                return retVal = true;
            }
            finally
            {
                if (!retVal)
                {
                    _parser.Position = startPos;
                }
            }
        }