private string CreateUnexpectedMessage(AphidToken token)
 {
     return string.Format(
         "Unexpected {0} ({1}) at offset {2}",
         token.TokenType,
         token.Lexeme,
         token.Index);
 }
        public AphidParserException(AphidToken unexpectedToken, AphidTokenType expectedToken)
        {
            UnexpectedToken = unexpectedToken;
            ExpectedToken = expectedToken;

            _message = string.Format(
                "{0}; expected {1}.",
                CreateUnexpectedMessage(unexpectedToken),
                expectedToken);
        }
Exemple #3
0
        public bool NextToken()
        {
            _tokenIndex++;

            if (_tokenIndex < _tokens.Count)
            {
                _currentToken = _tokens[_tokenIndex];
                return true;
            }
            else
            {
                _currentToken = default(AphidToken);
                return false;
            }
        }
Exemple #4
0
        protected void AssertTokens(string script, AphidToken[] tokens)
        {
            var tokens2 = GetTokens(script);
            Assert.AreEqual(tokens.Length, tokens2.Count);

            for (int i = 0; i < tokens.Length; i++)
            {
                Assert.AreEqual(tokens[i].TokenType, tokens2[i].TokenType);

                if (tokens[i].Lexeme != null)
                {
                    Assert.AreEqual(tokens[i].Lexeme, tokens2[i].Lexeme);
                }
            }
        }
        static string GetCodeExcerpt(string code, AphidToken token)
        {
            var matches = Regex.Matches(code, @"(\r\n)|\r|\n").OfType<Match>().ToArray();
            var firstAfter = matches.FirstOrDefault(x => x.Index > token.Index);

            int line;

            if (firstAfter != null)
            {
                line = Array.IndexOf(matches, firstAfter);
            }
            else
            {
                line = matches.Count();
            }

            var lines = code.Replace("\r\n", "\n").Replace('\r', '\n').Replace("\n", "\r\n").Split(new[] { "\r\n" }, StringSplitOptions.None);
            var loc = lines[line];

            return string.Format("({0}) {1}", line, loc);
        }
Exemple #6
0
        private TextCellType GetTokenColor(AphidToken t)
        {
            switch (t.TokenType)
            {
                case AphidTokenType.String:
                case AphidTokenType.Number:
                case AphidTokenType.HexNumber:
                    return TextCellType.Literal;

                case AphidTokenType.Identifier:
                    return TextCellType.Identifier;

                case AphidTokenType.breakKeyword:
                case AphidTokenType.catchKeyword:
                case AphidTokenType.defaultKeyword:
                case AphidTokenType.definedKeyword:
                case AphidTokenType.deleteKeyword:
                case AphidTokenType.elseKeyword:
                case AphidTokenType.extendKeyword:
                case AphidTokenType.falseKeyword:
                case AphidTokenType.finallyKeyword:
                case AphidTokenType.forKeyword:
                case AphidTokenType.ifKeyword:
                case AphidTokenType.inKeyword:
                case AphidTokenType.nullKeyword:
                case AphidTokenType.retKeyword:
                case AphidTokenType.switchKeyword:
                case AphidTokenType.thisKeyword:
                case AphidTokenType.trueKeyword:
                case AphidTokenType.tryKeyword:
                case AphidTokenType.whileKeyword:

                case AphidTokenType.functionOperator:
                case AphidTokenType.LoadLibraryOperator:
                case AphidTokenType.LoadScriptOperator:
                case AphidTokenType.PatternMatchingOperator:
                    return TextCellType.Keyword;

                case AphidTokenType.AdditionOperator:
                case AphidTokenType.AndOperator:
                case AphidTokenType.AssignmentOperator:
                case AphidTokenType.BinaryAndOperator:
                case AphidTokenType.BinaryOrOperator:
                case AphidTokenType.ColonOperator:
                case AphidTokenType.ComplementOperator:
                case AphidTokenType.DecrementOperator:
                case AphidTokenType.DivisionEqualOperator:
                case AphidTokenType.DivisionOperator:
                case AphidTokenType.EqualityOperator:
                case AphidTokenType.GreaterThanOperator:
                case AphidTokenType.GreaterThanOrEqualOperator:
                case AphidTokenType.IncrementOperator:
                case AphidTokenType.LessThanOperator:
                case AphidTokenType.LessThanOrEqualOperator:
                case AphidTokenType.MinusEqualOperator:
                case AphidTokenType.MinusOperator:
                case AphidTokenType.ModulusEqualOperator:
                case AphidTokenType.ModulusOperator:
                case AphidTokenType.MultiplicationEqualOperator:
                case AphidTokenType.MultiplicationOperator:
                case AphidTokenType.NotEqualOperator:
                case AphidTokenType.NotOperator:
                case AphidTokenType.OrEqualOperator:
                case AphidTokenType.OrOperator:
                case AphidTokenType.PipelineOperator:
                case AphidTokenType.PlusEqualOperator:
                case AphidTokenType.XorEqualOperator:
                case AphidTokenType.XorOperator:
                case AphidTokenType.MemberOperator:
                    return TextCellType.Operator;

                case AphidTokenType.LeftBrace:
                case AphidTokenType.RightBrace:
                case AphidTokenType.LeftBracket:
                case AphidTokenType.RightBracket:
                case AphidTokenType.LeftParenthesis:
                case AphidTokenType.RightParenthesis:
                    return TextCellType.Delimiter;

                case AphidTokenType.Comment:
                    return TextCellType.Comment;

                default:
                    return TextCellType.Text;
            }
        }
 public AphidParserException(AphidToken token)
 {
     Token = token;
 }
 public AphidParserException(AphidToken unexpectedToken)
 {
     UnexpectedToken = unexpectedToken;
     _message = CreateUnexpectedMessage(unexpectedToken) + ".";
 }
 public InterpreterException(string message, AphidToken token)
 {
     Message = message;
     Token = token;
 }
Exemple #10
0
        public static string GetCodeExcerpt(string code, AphidToken token, int surroundingLines = 4)
        {
            var matches = Regex.Matches(code, @"(\r\n)|\r|\n").OfType<Match>().ToArray();
            var firstAfter = matches.FirstOrDefault(x => x.Index > token.Index);

            int line;

            if (firstAfter != null)
            {
                line = Array.IndexOf(matches, firstAfter);
            }
            else
            {
                line = matches.Count();
            }

            var lines = code.Replace("\r\n", "\n").Replace('\r', '\n').Replace("\n", "\r\n").Split(new[] { "\r\n" }, StringSplitOptions.None);
            var sb = new StringBuilder();

            for (int i = line - surroundingLines; i < line + surroundingLines + 1; i++)
            {
                if (i > 0 && i < lines.Length)
                {
                    sb.AppendLine(string.Format("({0}) {1}", i, lines[i]));
                }
            }

            return sb.ToString();
        }