예제 #1
0
 /// <summary>
 /// Writes a character to the underlying writer
 /// </summary>
 /// <param name="value">the char to write</param>
 /// <remarks>
 /// <para>
 /// Writes a character to the underlying writer
 /// </para>
 /// </remarks>
 public override void Write(char value)
 {
     try
     {
         base.Write(value);
     }
     catch (Exception e)
     {
         m_errorHandler.Error("Failed to write [" + value.ToString() + "].", e, ErrorCode.WriteFailure);
     }
 }
예제 #2
0
        private void Declare(Token name)
        {
            if (m_Scopes.Count == 0)
            {
                return;
            }
            Scope scope = m_Scopes.Peek();

            if (scope.ContainsKey(name.lexeme))
            {
                m_ErrorHandler.Error(name, "Variable with this name already declared in this scope.");
            }
            scope[name.lexeme] = false;
        }
예제 #3
0
        public void ActivateOptions()
        {
            if (string.IsNullOrEmpty(Name) || string.IsNullOrEmpty(FileName))
            {
                _errorHandler.Error("Template name or fileName is empty!");
            }

            if (!File.Exists(FileName))
            {
                _errorHandler.Error(string.Format("Could not find template file: {0}", FileName));
            }

            IsValid = true;
        }
예제 #4
0
        private bool DoEndTag(string ident, SymbolScanner scanner)
        {
            bool ret = false;

            Trace.WriteLine("End Tag:" + ident);
            scanner.SkipSpaces();
            if (scanner.NextSymbol == SymbolScanner.SymbolCloseTag)
            {
                scanner.SkipSymbol();
                scanner.SkipSpaces();
            }

            char ch = scanner.GetSymbol();

            if (ch != '>')
            {
                _errorHandler.Error($"Expected '>' symbol but become:'{ch}'", scanner);
            }
            else
            {
                ret = true;
            }

            return(ret);
        }
예제 #5
0
 public virtual void Error(ParseError error)
 {
     if (errorHandler != null)
     {
         errorHandler.Error(error);
     }
 }
예제 #6
0
 public static void Log(string data, string host, string indexName, string userName, string password, int port = 8089, IErrorHandler errorHandler = null, bool useFreshSession = false,
                        int sessionTimeout = 55)
 {
     try
     {
         indexName = indexName.ToLowerInvariant();
         var service  = CreateSplunkService(host, indexName, userName, password, port, useFreshSession, sessionTimeout);
         var receiver = service.GetReceiver();
         var args     = new ReceiverSubmitArgs()
         {
             Index      = indexName,
             Source     = "SplunkAppender",
             SourceType = "bigjson",
             Host       = Environment.MachineName
         };
         receiver.Submit(args, data);
     }
     catch (Exception ex)
     {
         if (errorHandler != null)
         {
             errorHandler.Error("Splunk Appender Log Exception.", ex);
         }
     }
 }
예제 #7
0
 public virtual void Error(SAXParseException e)
 {
     if (_errorHandler != null)
     {
         _errorHandler.Error(e);
     }
 }
예제 #8
0
파일: Resolver.cs 프로젝트: richsoft/CsLox
        /// <summary>
        /// Resolve a variable expression
        /// </summary>
        /// <param name="expr">The expression</param>
        public object Visit(Expr.Variable expr)
        {
            if (!_scopes.IsEmpty() && _scopes.Peek().Get(expr.Name.Lexeme) == false)
            {
                _error_handler.Error(expr.Name, "Cannot read local variable in its own initializer.");
            }
            ResolveLocal(expr, expr.Name);

            return(null);
        }
예제 #9
0
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void
        public static async void FireAndForgetSafeAsync(this Task task, IErrorHandler handler = null)
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void
        {
            try
            {
                await task;
            }
            catch (Exception ex)
            {
                handler?.Error(ex.Message);
            }
        }
예제 #10
0
 /// <summary>
 /// Interpret statements
 /// </summary>
 /// <param name="statements">The statements</param>
 public void Interpret(List <Stmt> statements)
 {
     try
     {
         foreach (Stmt statement in statements)
         {
             Execute(statement);
         }
     }
     catch (RuntimeErrorException ex)
     {
         _error_handler.Error(ex);
     }
 }
예제 #11
0
        public static async Task LogAsync(string data, string host, string indexName, string userName, string password, int port = 8089, IErrorHandler errorHandler = null, bool useFreshSession = false,
                                          int sessionTimeout = 55)
        {
            var t = new Task(() =>
            {
                try
                {
                    Log(data, host, indexName, userName, password, port, errorHandler, useFreshSession, sessionTimeout);
                }
                catch (Exception ex)
                {
                    if (errorHandler != null)
                    {
                        errorHandler.Error("Splunk Appender Log Exception.", ex);
                    }
                }
            });

            t.Start();
            await t;
        }
예제 #12
0
        /// <summary>
        /// Takes our current string and checks for the next token.
        /// </summary>
        private void ScanToken()
        {
            // Get our next char
            char nextChar = Read();

            // Switch on it
            switch (nextChar)
            {
            // Braces
            case '(': AddToken(TokenType.LeftParen); break;

            case ')': AddToken(TokenType.RightParen); break;

            case '{': AddToken(TokenType.LeftBrace); break;

            case '}': AddToken(TokenType.RightBrace); break;

            case '[': AddToken(TokenType.LeftBracket); break;

            case ']': AddToken(TokenType.RightBracket); break;

            // Syntax
            case ',': AddToken(TokenType.Comma); break;

            case '.': AddToken(TokenType.Dot); break;

            case '?': AddToken(TokenType.Question); break;

            case ':': AddToken(TokenType.Colon); break;

            // Math
            case '%': AddToken(TokenType.Modulus); break;

            case '-': AddToken(Match('-') ? TokenType.MinusMinus : TokenType.Minus); break;

            case '+': AddToken(Match('+') ? TokenType.PlusPlus : TokenType.Plus); break;

            case ';': AddToken(TokenType.Semicolon); break;

            case '*': AddToken(TokenType.Star); break;

            case '!': AddToken(Match('=') ? TokenType.BangEqual : TokenType.Bang); break;

            case '=': AddToken(Match('=') ? TokenType.EqualEqual : TokenType.Equal); break;

            case '<': AddToken(Match('=') ? TokenType.LessEqual : TokenType.Less); break;

            case '>': AddToken(Match('=') ? TokenType.GreaterEqual : TokenType.Greater); break;

            // Long Literals
            case '"': ParseStringToken(); break;

            // Whitespace
            case ' ':
            case '\r':
            case '\t':
                break;

            case '\n':
                m_Line++;
                break;

            case '/':
                if (Match('/'))
                {
                    // A comment goes to the end of a line
                    while (Peek() != '\n' && !isAtEnd)
                    {
                        // Move to the next char
                        Read();
                    }
                }
                else if (Match('*'))
                {
                    ParseMulitLineComment();
                }
                else
                {
                    AddToken(TokenType.Slash);
                }
                break;

            default:
                // Handle all numbers
                if (char.IsDigit(nextChar))
                {
                    ParseNumberToken();
                }
                else if (IsAlpha(nextChar))
                {
                    ParseIdentifier();
                }
                else
                {
                    m_ErrorHandler.Error(m_Line, string.Format("Unexpected character '{0}'", nextChar));
                }
                break;
            }
        }
예제 #13
0
 // We can safely report a few validity errors that
 // make layered Sax2 Dtd validation more conformant
 internal void verror(string message)
 {
     errorHandler.Error(new ParseErrorImpl(message, this, ""));
 }
예제 #14
0
 private ParserException Error(Token token, string message)
 {
     m_ErrorHandler.Error(token, message);
     return(new ParserException());
 }
예제 #15
0
        bool Initialize(JobSettings settings, IErrorHandler errorHandler)
        {
            this.settings = settings;
            var auditColumns = settings.AuditColumns.AuditColumnNames().Select(c => c.ToLowerInvariant()).ToList();

            if (settings.UseAuditColumnsOnImport ?? false)
            {
                foreach (var field in Fields)
                {
                    if (auditColumns.Contains(field.CanonicalName))
                    {
                        field.IsAuditingColumn = true;
                    }
                }
            }

            if (!Fields.Any())
            {
                errorHandler.Error($"Could not find any information for table {Name}. Make sure it exists in the target database");
                return(false);
            }

            var data = Fields.Select(f => f.Name.ToLowerInvariant());

            if (PrimaryKey == null)
            {
                var primaryKeys = Fields.Where(f => f.IsPrimaryKey).ToList();
                if (primaryKeys.Count == 0)
                {
                    //errorHandler.Warning($"No primary key set for table {Name}, trying to infer from name");
                    primaryKeys = Fields.Where(f => f.Name.ToLowerInvariant() == "id" || f.Name.ToLowerInvariant() == BasicName.ToLowerInvariant() + "id").ToList();
                }
                if (primaryKeys.Count > 1)
                {
                    errorHandler.Error($"Multiple primary keys found for table {Name} ({string.Join(", ", primaryKeys.Select(pk => pk.Name))}). Please specify one manually.");
                    return(false);
                }
                if (!primaryKeys.Any())
                {
                    errorHandler.Error($"No primary key could be found for table {Name}. Please specify one manually");
                    return(false);
                }

                PrimaryKey = primaryKeys.Single().Name;
            }
            PrimaryKey = PrimaryKey.ToLowerInvariant();

            data = data.Where(f => f != PrimaryKey);

            if (settings.UseAuditColumnsOnImport ?? false)
            {
                data = data.Where(f => !settings.AuditColumns.AuditColumnNames().Select(a => a.ToLowerInvariant()).Contains(f));
            }

            if (IsEnvironmentSpecific)
            {
                data = data.Where(f => f != "isenvironmentspecific");
            }

            DataFields = data.ToList();
            return(true);
        }
예제 #16
0
        /// <summary>
        /// Scan for a new token
        /// </summary>
        private void ScanToken()
        {
            char c = Advance();

            switch (c)
            {
            // 1 char lexemes
            case '(': AddToken(TokenType.LEFT_PAREN); break;

            case ')': AddToken(TokenType.RIGHT_PAREN); break;

            case '{': AddToken(TokenType.LEFT_BRACE); break;

            case '}': AddToken(TokenType.RIGHT_BRACE); break;

            case ',': AddToken(TokenType.COMMA); break;

            case '.': AddToken(TokenType.DOT); break;

            case '-': AddToken(TokenType.MINUS); break;

            case '+': AddToken(TokenType.PLUS); break;

            case ';': AddToken(TokenType.SEMICOLON); break;

            case '*': AddToken(TokenType.STAR); break;

            // 2 char lexemes
            case '!': AddToken(Match('=') ? TokenType.BANG_EQUAL : TokenType.BANG); break;

            case '=': AddToken(Match('=') ? TokenType.EQUAL_EQUAL : TokenType.EQUAL); break;

            case '<': AddToken(Match('=') ? TokenType.LESS_EQUAL : TokenType.LESS); break;

            case '>': AddToken(Match('=') ? TokenType.GREATER_EQUAL : TokenType.GREATER); break;

            // Slash could be a comment
            case '/':
                if (Match('/'))
                {
                    // A comment continues to the end of the line
                    while (Peek() != '\n' && !IsAtEnd())
                    {
                        Advance();
                    }
                }
                else
                {
                    AddToken(TokenType.SLASH);
                }
                break;


            // Whitespace (fall-through)
            case ' ':
            case '\r':
            case '\t':
                // Ignore
                break;

            // New Line
            case '\n':
                _line++;
                break;

            // String
            case '"': String(); break;



            default:
                if (IsDigit(c))
                {
                    Number();
                }
                else if (IsAlpha(c))
                {
                    Identifier();
                }
                else
                {
                    _error_handler.Error(_line, $"Unexpected character: '{c}'.");
                }
                break;
            }
        }
예제 #17
0
        public XamlMainObjectNode Parse(StreamReader fileStream)
        {
            if (fileStream == null)
            {
                throw new ArgumentNullException(nameof(fileStream));
            }

            Stack <XamlObjectNode> objStack    = new Stack <XamlObjectNode>();
            XamlObjectNode         currentNode = null;
            XamlMainObjectNode     mainObject  = null;

            SymbolScanner scanner = new SymbolScanner(fileStream);

            int lineNumberStart   = 0;
            int linePositionStart = 0;
            //long newLineStreamPosition = fileStream.BaseStream.Position;
            string ident;

            //bool tagBracketClosed = false;
            while (!fileStream.EndOfStream)
            {
                scanner.SkipSpaces();
                char ch = scanner.GetSymbol();
                if (ch == '\0')
                {
                    break;
                }

                if (ch == SymbolScanner.SymbolStartTag)
                {
                    //tagBracketClosed = false;
                    lineNumberStart = scanner.LineNumber;
                    //open tag symbol must be start not the next symbol
                    linePositionStart = scanner.CharPosition - 1;
                    char chNext = scanner.NextSymbol;
                    if (chNext == SymbolScanner.SymbolCloseTag)
                    {
                        scanner.SkipSymbol();
                        ident = scanner.GetName();
                        if (DoEndTag(ident, scanner))
                        {
                            CloseTag(ident, scanner, objStack);
                        }
                    }
                    else if (chNext == SymbolScanner.SymbolStartComment)
                    {
                        string comment = scanner.ReadComment();
                        Trace.WriteLine($"{lineNumberStart + 1}:{linePositionStart + 1} Comment:{comment}");
                        XamlCommentNode commentNode = new XamlCommentNode
                        {
                            LineNumberStart   = lineNumberStart + 1,
                            LinePositionStart = linePositionStart + 1,
                            Comment           = comment
                        };
                        commentNode.LineNumberEnd = scanner.LineNumber + 1;
                        //end position is outside comment tag
                        commentNode.LinePositionEnd = scanner.CharPosition;
                        objStack.Push(commentNode);
                    }
                    else
                    {
                        char breakSymbol;
                        ident       = scanner.GetName();
                        breakSymbol = scanner.NextSymbol;
                        //ident = GetIdent(fileStream, out breakSymbol);
                        Trace.WriteLine($"{lineNumberStart + 1}:{linePositionStart + 1} Start Tag:{ident}");
                        if (mainObject == null)
                        {
                            mainObject = new XamlMainObjectNode {
                                LineNumberStart = lineNumberStart + 1, LinePositionStart = linePositionStart + 1
                            };
                            mainObject.Name = ident;
                            currentNode     = mainObject;
                            //root.MainObject = mainObject;
                            objStack.Push(mainObject);
                        }
                        else
                        {
                            currentNode = new XamlObjectNode {
                                LineNumberStart = lineNumberStart + 1, LinePositionStart = linePositionStart + 1
                            };
                            currentNode.Name = ident;
                            objStack.Push(currentNode);
                        }

                        if (breakSymbol != SymbolScanner.SymbolEndTag)
                        {
                            scanner.SkipSpaces();
                            breakSymbol = scanner.NextSymbol;
                        }

                        if (breakSymbol == SymbolScanner.SymbolCloseTag)
                        {
                            //end of tag
                            if (DoEndTag(ident, scanner))
                            {
                                CloseTag(ident, scanner, objStack);
                            }
                        }
                        else if (breakSymbol != SymbolScanner.SymbolEndTag)
                        {
                            XamlObjectNode objectNode = null;
                            if (objStack.Count > 0)
                            {
                                objectNode = objStack.Peek();
                            }

                            bool isClosed = ReadAttributes(objectNode, scanner, breakSymbol);
                            if (isClosed)
                            {
                                //tagBracketClosed = true;
                                if (objectNode != null)
                                {
                                    objectNode.SetState(XamlNodeBase.EState.EndTagPresent);
                                    //objectNode.IsTagBracketClosed = true;
                                }

                                Trace.WriteLine("Tag end symbol for:" + ident);
                            }

                            if (scanner.NextSymbol == SymbolScanner.SymbolCloseTag)
                            {
                                //end of tag
                                if (DoEndTag(ident, scanner))
                                {
                                    CloseTag(ident, scanner, objStack);
                                }
                            }
                        }
                        else
                        {
                            // skip '>'
                            scanner.SkipSymbol();

                            XamlObjectNode objectNode = objStack.Peek();
                            objectNode.SetState(XamlNodeBase.EState.EndTagPresent);
                            Trace.WriteLine("Tag end symbol for:" + ident);
                        }

                        //chNext = scanner.NextSymbol;
                    }
                }
                else
                {
                    if (objStack.Count > 0)
                    {
                        XamlObjectNode objectNode = objStack.Peek();
                        if (objectNode.IsState(XamlNodeBase.EState.EndTagPresent))
                        {
                            lineNumberStart = scanner.LineNumber;
                            //text symbol must be current not the next symbol
                            linePositionStart = scanner.CharPosition - 1;

                            string text = scanner.ReadText(ch);
                            Trace.WriteLine("Text node:" + text);
                            XamlTextNode textNode = new XamlTextNode(text)
                            {
                                LineNumberStart = lineNumberStart + 1, LinePositionStart = linePositionStart + 1
                            };
                            textNode.LineNumberEnd = scanner.LastTextLineNumberEnd + 1;
                            // it must be the next symbol
                            textNode.LinePositionEnd = scanner.LastTextCharPositionEnd;
                            objectNode.SetState(XamlNodeBase.EState.TextNodePresent);
                            objectNode.AddChild(textNode);
                        }
                        else
                        {
                            //Trace.Write(ch);
                            _errorHandler?.Error($"Not expected symbol :'{ch}'", scanner);
                        }
                    }
                    else
                    {
                        //Trace.Write(ch);
                        _errorHandler?.Error($"Not expected symbol, no tag found :'{ch}'", scanner);
                    }
                }

                char chNext1 = scanner.CheckEndOfLine(scanner.NextSymbol);
            }

            if (objStack.Count > 0)
            {
                //ignore exception by non closed main state. Temporary
                if (mainObject != null && objStack.Count == 1)
                {
                    if (!mainObject.IsState(XamlNodeBase.EState.Closed))
                    {
                        return(mainObject);
                    }
                }
                _errorHandler?.Error($"unused {objStack.Count} nodes", scanner);
            }

            return(mainObject);
        }
예제 #18
0
        public virtual void Parse(TextReader text)
        {
            Stack             nsstack      = new Stack();
            Locator           locator      = new Locator();
            SAXParseException saxException = new SAXParseException();
            Attributes        atts         = new Attributes();
            XmlTextReader     reader       = null;

            try
            {
                reader = new XmlTextReader(text);
                object nsuri = reader.NameTable.Add(
                    "http://www.w3.org/2000/xmlns/");
                handler.StartDocument();
                while (reader.Read())
                {
                    string prefix = "";
                    locator.LineNumber   = reader.LineNumber;
                    locator.ColumnNumber = reader.LinePosition;
                    handler.SetDocumentLocator(locator);
                    switch (reader.NodeType)
                    {
                    case XmlNodeType.Element:
                        nsstack.Push(null);     //marker
                        atts = new Attributes();
                        while (reader.MoveToNextAttribute())
                        {
                            if (reader.NamespaceURI.Equals(nsuri))
                            {
                                prefix = "";
                                if (reader.Prefix == "xmlns")
                                {
                                    prefix = reader.LocalName;
                                }
                                nsstack.Push(prefix);
                                handler.StartPrefixMapping(prefix, reader.Value);
                            }
                            else
                            {
                                atts.AddAttribute(reader.NamespaceURI, reader.Name, reader.Name, reader.GetType().ToString(), reader.Value);
                            }
                        }
                        reader.MoveToElement();
                        Handler.StartElement(reader.NamespaceURI, reader.LocalName, reader.Name, atts);
                        if (reader.IsEmptyElement)
                        {
                            handler.EndElement(reader.NamespaceURI, reader.LocalName, reader.Name);
                        }
                        break;

                    case XmlNodeType.EndElement:
                        handler.EndElement(reader.NamespaceURI, reader.LocalName, reader.Name);
                        while (prefix != null)
                        {
                            handler.EndPrefixMapping(prefix);
                            prefix = (string)nsstack.Pop();
                        }
                        break;

                    case XmlNodeType.Text:
                        handler.Characters(reader.Value.ToCharArray(), 0, reader.Value.Length);
                        break;

                    case XmlNodeType.ProcessingInstruction:
                        handler.ProcessingInstruction(reader.Name, reader.Value);
                        break;

                    case XmlNodeType.Whitespace:
                        char[] whiteSpace = reader.Value.ToCharArray();
                        handler.IgnorableWhitespace(whiteSpace, 0, 1);
                        break;

                    case XmlNodeType.Entity:
                        handler.SkippedEntity(reader.Name);
                        break;
                    }
                } //While
                handler.EndDocument();
            }     //try
            catch (Exception exception)
            {
                saxException.LineNumber = reader.LineNumber;
                saxException.SystemID   = "";
                saxException.setMessage(exception.GetBaseException().ToString());
                errorHandler.Error(saxException);
            }
            finally
            {
                if (reader.ReadState != ReadState.Closed)
                {
                    reader.Close();
                }
            }
        } //parse()
예제 #19
0
        public virtual void Attribute(string aname, string value, bool isSpecified)
        {
            // Code changed by MHK 16 April 2001.
            // The only safe thing to do is to process all the namespace declarations
            // first, then process the ordinary attributes. So if this is a namespace
            // declaration, we deal with it now, otherwise we save it till we get the
            // startElement call.

            if (_attributeCount++ == 0)
            {
                if (_namespaces)
                {
                    _prefixStack.PushContext();
                }
            }

            // set nsTemp [0] == namespace URI (or empty)
            // set nsTemp [1] == local name (or empty)
            if (value == null)
            {
                // MHK: I think this can only happen on an error recovery path
                // MHK: I was wrong: AElfred was notifying null values of attribute
                // declared in the DTD as #IMPLIED. But I've now changed it so it doesn't.
                return;
            }

            if (_namespaces && aname.StartsWith("xmlns"))
            {
                if (aname.Length == 5)
                {
                    _prefixStack.DeclarePrefix("", value);
                    //System.err.println("Declare default prefix = "+value);
                    _contentHandler.StartPrefixMapping("", value);
                }
                else if (aname[5] == ':' && !aname.Equals("xmlns:xml"))
                {
                    if (aname.Length == 6)
                    {
                        _errorHandler.Error(new SAXParseException("Missing namespace prefix in namespace declaration: " + aname,
                                                                  this));
                        return;
                    }
                    string prefix = aname.Substring(6);

                    if (value.Length == 0)
                    {
                        _errorHandler.Error(new SAXParseException("Missing URI in namespace declaration: " + aname, this));
                        return;
                    }
                    _prefixStack.DeclarePrefix(prefix, value);
                    //System.err.println("Declare prefix " +prefix+"="+value);
                    _contentHandler.StartPrefixMapping(prefix, value);
                }

                if (!_xmlNames)
                {
                    // if xmlNames option wasn't selected,
                    // we don't report xmlns:* declarations as attributes
                    return;
                }
            }

            _attributeNames.Add(aname);
            _attributeValues.Add(value);
        }