Пример #1
0
        private void ParseKag(string input, string title = "input")
        {
            ClearLog();
            DateTime opStart = DateTime.Now;

            var reader  = new StringSourceReader(title, input);
            var lexer   = new Lexer(reader);
            var morpher = new Morpher(lexer);
            var parser  = new KagParser(morpher);
            var sb      = new StringBuilder();

            int         numErrors  = 0;
            var         errors     = new StringBuilder();
            IExpression expression = null;

            while (!(expression is EofExpression))
            {
                expression?.Print(sb, true, 0);
                try
                {
                    expression = parser.ParseExpression <DocumentExpression>();
                }
                catch (ParseException ex)
                {
                    string error = Environment.NewLine +
                                   ex.Position + Environment.NewLine +
                                   ex.GetType() + Environment.NewLine +
                                   ex.Message + Environment.NewLine;
                    sb.AppendLine(error);
                    errors.AppendLine(error);
                    numErrors++;
                }
                catch (Exception ex)
                {
                    string error = Environment.NewLine +
                                   ex.GetType() + Environment.NewLine +
                                   ex.Message + Environment.NewLine;
                    sb.AppendLine(error);
                    errors.AppendLine(error);
                    numErrors++;
                }
            }
            if (DisplayOutput(title))
            {
                Log(sb.ToString());
            }
            if (errors.Length > 0)
            {
                Log(numErrors + " Errors:");
                Log(errors.ToString());
            }

            DateTime opEnd    = DateTime.Now;
            TimeSpan duration = opEnd - opStart;

            Log($"Done in {duration.TotalMilliseconds}ms." + Environment.NewLine);
        }
Пример #2
0
        private List <Token> ScanPreCode(string preCode, ContextFile fileContext)
        {
            if (string.IsNullOrEmpty(preCode))
            {
                return(new List <Token>());
            }
            StringSourceReader reader  = new StringSourceReader(preCode);
            List <Token>       tokens2 = ScanReaderTokens(reader, fileContext);

            foreach (var token in tokens2)
            {
                token.Line = -token.Line - 1;
                token.Col  = token.Col - 1000;//方法体以行列区分,所以减去一些。
            }
            return(tokens2);
        }
Пример #3
0
        private List <LineTokenCollection> ScanTextCode(string code, ContextFile fileContext, int startLine)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(new List <LineTokenCollection>());
            }
            StringSourceReader         reader  = new StringSourceReader(code);
            List <LineTokenCollection> tokens2 = ScanReaderTokens(reader, fileContext, startLine);

            //foreach (var token in tokens2)
            //{
            //    token.Line = -token.Line - 1;
            //    token.Col = token.Col - 1000;//方法体以行列区分,所以减去一些。
            //}
            return(tokens2);
        }
Пример #4
0
        private void LexKag(string input, string title = "input")
        {
            ClearLog();
            DateTime opStart = DateTime.Now;

            Token token;
            var   reader  = new StringSourceReader(title, input);
            var   lexer   = new Lexer(reader);
            var   morpher = new Morpher(lexer);
            var   sb      = new StringBuilder();

            do
            {
                try
                {
                    token = morpher.ReadToken();
                }
                catch (ParseException ex)
                {
                    sb.AppendLine(Environment.NewLine +
                                  ex.Position + Environment.NewLine +
                                  ex.GetType() + Environment.NewLine +
                                  ex.Message + Environment.NewLine);
                    break;
                }
                catch (Exception ex)
                {
                    sb.AppendLine(Environment.NewLine +
                                  ex.GetType() + Environment.NewLine +
                                  ex.Message + Environment.NewLine);
                    break;
                }
                if (DisplayOutput(title))
                {
                    sb.AppendLine(token.ToString());
                }
            } while (token.Type != TokenType.Eof);

            DateTime opEnd    = DateTime.Now;
            TimeSpan duration = opEnd - opStart;

            sb.AppendLine($"Done in {duration.TotalMilliseconds}ms." + Environment.NewLine);
            Log(sb.ToString());
        }