Example #1
0
        public SyntaxParser(SlidingTextWindow TextWindow)
        {
            TokenList = new SyntaxList();
            oLexer    = new SyntaxLexer(TextWindow);

            // Must initialise after object variables initialised
            this.Initialise();
        }
Example #2
0
        public static SyntaxParser GetSyntaxParser(string text)
        {
            var inputStream       = new AntlrInputStream(text);
            var syntaxLexer       = new SyntaxLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(syntaxLexer);
            var syntaxParser      = new SyntaxParser(commonTokenStream);

            return(syntaxParser);
        }
Example #3
0
        public DatabaseExpressionEvaluator(string expression, UniversalGuid playerGuid)
        {
            lexer  = new SyntaxLexer(new AntlrInputStream(expression));
            tokens = new CommonTokenStream(lexer);
            parser = new SyntaxParser(tokens);
            parser.BuildParseTree = true;
            parser.RemoveErrorListeners();

            visitor = new ExpressionVisitor(new IsPacketSpecificPlayerProcessor(playerGuid));
        }
Example #4
0
        /// <summary>
        /// This is very unsafe as everything is converted to Upper
        /// before the conversion (ie. it matches against any case)
        /// </summary>
        /// <param name="xoTrivia"></param>
        /// <returns></returns>
        private static Boolean ScanTriviaForKeywords(
            ParsingContext xoContext,
            SyntaxTrivia xoTrivia,
            out List <ISyntax> xaoReturnList)
        {
            // Initialise the out var
            xaoReturnList = new List <ISyntax>();

            // Exit early if invalid argument passed
            if (xoTrivia == null)
            {
                return(false);
            }

            // Break apart the trivia text
            String[] asTriviaTextTokens = xoTrivia.RawSQLText.Split();

            // Start looping through the trivia text
            for (int iIndex = 0; iIndex < asTriviaTextTokens.Length; iIndex++)
            {
                // For each string in the Comment/Trivia
                String     sLoopingVar   = asTriviaTextTokens[iIndex];
                SyntaxKind ePossibleKind = SyntaxKindUtilities.GetKindFromString(sLoopingVar); // Try and get a kind

                // If we have a positive match
                if (ePossibleKind != SyntaxKind.UnknownNode)
                {
                    // Mayfly
                    SyntaxToken oToken = new SyntaxToken(ePossibleKind, sLoopingVar);

                    // If we can consume this node (it is something we expect)
                    if (xoContext.CurrentNode.CanConsumeNode(
                            new ParsingContext(xoContext.CurrentNode,
                                               new SyntaxList(oToken)),
                            false) == CanConsumeResult.Consume)
                    {
                        // Create tokens from everything beyond this Keyword we can use (because they will most likely be
                        // a part of the new keyword)
                        String sRemainingText = String.Join(" ", asTriviaTextTokens.Skip(iIndex));
                        xoTrivia.RawSQLText = String.Join(" ", asTriviaTextTokens.Take(iIndex));

                        // Start lexing the rest of the terms
                        SyntaxLexer oLexer = new SyntaxLexer(new SlidingTextWindow(sRemainingText));

                        // Add the new tokens to our list
                        while (oLexer.HasTokensLeftToProcess())
                        {
                            xaoReturnList.Add(oLexer.LexNextToken());
                        }
                    }
                }
            }

            return(xaoReturnList.Count > 0);
        }
Example #5
0
        public static void Test_LexIdentifiers(string input, string expected)
        {
            List <SyntaxToken>     tokens     = new SyntaxLexer(input).Lex();
            List <SyntaxTokenKind> tokenKinds = new List <SyntaxTokenKind>();

            foreach (SyntaxToken token in tokens)
            {
                tokenKinds.Add(token.Kind);
            }
            List <SyntaxTokenKind> expectedTokenKinds = ConvertToSyntaxTokenKinds(expected);

            Assert.Equal(expectedTokenKinds, tokenKinds);
        }
        /// <summary>
        /// Check text changed
        /// </summary>
        /// <param name="e"></param>
        protected override void OnTextChanged(TextChangedEventArgs e)
        {
            base.OnTextChanged(e);

            int    length   = Text.Length;
            string text_buf = Text;

            int pos = text_buf.IndexOf('\t');

            while (pos != -1)
            {
                int linestart = text_buf.LastIndexOf(Environment.NewLine, pos);
                if (linestart == -1)
                {
                    linestart = 0;
                }
                else
                {
                    linestart += 2;
                }
                int numSpace = TabSize - (pos - linestart) % TabSize;

                text_buf = text_buf.Remove(pos, 1);
                text_buf = text_buf.Insert(pos, new string(' ', numSpace));

                pos = text_buf.IndexOf('\t', pos);
            }

            Text = text_buf;


            //this.Text = this.Text.Replace("\t",this.Tab);
            // If the Text is changed because of the Tab-Replacing this function is called again
            // thats why we don't Parse
            if (Text.Length > length)
            {
                return;
            }

            if (SyntaxLexer != null)
            {
                SyntaxLexer.Parse(this.Text, CaretIndex, e.Changes);
            }
            this.InvalidateVisual();
        }
Example #7
0
        public static void Main()
        {
            while (true)
            {
                Console.Write("> ");

                string input = Console.ReadLine();

                if (input == "")
                {
                    continue;
                }

                if (input == "exit")
                {
                    return;
                }

                SyntaxLexer  lexer       = new SyntaxLexer();
                SyntaxParser parser      = new SyntaxParser();
                Interpreter  interpreter = new Interpreter();

                List <SyntaxToken> tokens = lexer.Lex(input);

                SyntaxParseResult result = parser.Parse(tokens);

                foreach (Diagnostic diagnostic in result.Diagnostics)
                {
                    Console.WriteLine($"{diagnostic.Severity}: {diagnostic.Message} at {diagnostic.Range.Start}");
                }

                DustObject value = interpreter.Interpret(result.Node);

                Console.WriteLine($"{value.ToString().Value} ({value.TypeName})");
            }
        }