Ejemplo n.º 1
0
        private static ParseResult Parse(string subject, string fileName)
        {
            subject = subject ?? "";

            try
            {
                IList<LexicalElement> lexicalElements;
                var grammar = new Pegasus.Parser.PegParser().Parse(subject, fileName, out lexicalElements);

                return new ParseResult
                {
                    Grammar = grammar,
                    LexicalElements = lexicalElements,
                    Errors = new List<CompilerError>(),
                };
            }
            catch (Exception ex)
            {
                var cursor = ex.Data["cursor"] as Cursor ?? new Cursor(subject, 0, fileName);

                var parts = Regex.Split(ex.Message, @"(?<=^\w+):");
                if (parts.Length == 1)
                {
                    parts = new[] { "", parts[0] };
                }

                return new ParseResult
                {
                    Errors = new List<CompilerError>
                    {
                        new CompilerError(fileName, cursor.Line, cursor.Column, errorNumber: parts[0], errorText: parts[1]),
                    },
                };
            }
        }
Ejemplo n.º 2
0
        private static ParseResult Parse(string subject)
        {
            subject = subject ?? string.Empty;

            IList <LexicalElement> lexicalElements;

            try
            {
                var grammar = new Pegasus.Parser.PegParser().Parse(subject, SentinelFileName, out lexicalElements);

                return(new ParseResult
                {
                    Grammar = grammar,
                    LexicalElements = lexicalElements,
                    Errors = new List <CompilerError>(),
                });
            }
            catch (Exception ex)
            {
                var cursor = ex.Data["cursor"] as Cursor ?? new Cursor(subject, 0, SentinelFileName);
                lexicalElements = cursor.GetLexicalElements();

                var parts = Regex.Split(ex.Message, @"(?<=^\w+):");
                if (parts.Length == 1)
                {
                    parts = new[] { string.Empty, parts[0] };
                }

                return(new ParseResult
                {
                    LexicalElements = lexicalElements,
                    Errors = new List <CompilerError>
                    {
                        new CompilerError(SentinelFileName, cursor.Line, cursor.Column, errorNumber: parts[0], errorText: parts[1]),
                    },
                });
            }
        }