ada.editor/src/org/netbeans/modules/ada/editor/parser/Ada95ErrorHandler.java
author Andrea Lucarelli <raster@netbeans.org>
Sun, 22 Aug 2010 23:37:11 +0200
branchrelease68
changeset 16367 d2820c029d3a
parent 15779 367c7fdb5d23
permissions -rw-r--r--
Add JVM compiler support.
raster@14180
     1
/*
raster@14180
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
raster@14180
     3
 *
raster@14180
     4
 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
raster@14180
     5
 *
raster@14180
     6
 * The contents of this file are subject to the terms of either the GNU
raster@14180
     7
 * General Public License Version 2 only ("GPL") or the Common
raster@14180
     8
 * Development and Distribution License("CDDL") (collectively, the
raster@14180
     9
 * "License"). You may not use this file except in compliance with the
raster@14180
    10
 * License. You can obtain a copy of the License at
raster@14180
    11
 * http://www.netbeans.org/cddl-gplv2.html
raster@14180
    12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
raster@14180
    13
 * specific language governing permissions and limitations under the
raster@14180
    14
 * License.  When distributing the software, include this License Header
raster@14180
    15
 * Notice in each file and include the License file at
raster@14180
    16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
raster@14180
    17
 * particular file as subject to the "Classpath" exception as provided
raster@14180
    18
 * by Sun in the GPL Version 2 section of the License file that
raster@14180
    19
 * accompanied this code. If applicable, add the following below the
raster@14180
    20
 * License Header, with the fields enclosed by brackets [] replaced by
raster@14180
    21
 * your own identifying information:
raster@14180
    22
 * "Portions Copyrighted [year] [name of copyright owner]"
raster@14180
    23
 *
raster@14180
    24
 * If you wish your version of this file to be governed by only the CDDL
raster@14180
    25
 * or only the GPL Version 2, indicate your decision by adding
raster@14180
    26
 * "[Contributor] elects to include this software in this distribution
raster@14180
    27
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
raster@14180
    28
 * single choice of license, a recipient has the option to distribute
raster@14180
    29
 * your version of this file under either the CDDL, the GPL Version 2 or
raster@14180
    30
 * to extend the choice of license to its licensees as provided above.
raster@14180
    31
 * However, if you add GPL Version 2 code and therefore, elected the GPL
raster@14180
    32
 * Version 2 license, then the option applies only if the new code is
raster@14180
    33
 * made subject to such option by the copyright holder.
raster@14180
    34
 *
raster@14180
    35
 * Contributor(s):
raster@14180
    36
 *
raster@14180
    37
 * Portions Copyrighted 2008 Sun Microsystems, Inc.
raster@14180
    38
 */
raster@14180
    39
raster@14180
    40
package org.netbeans.modules.ada.editor.parser;
raster@14180
    41
raster@14180
    42
import java.util.ArrayList;
raster@15779
    43
import java.util.Arrays;
raster@14180
    44
import java.util.List;
raster@14180
    45
import java.util.logging.Level;
raster@14180
    46
import java.util.logging.Logger;
raster@14180
    47
import java_cup.runtime.Symbol;
raster@14180
    48
import org.netbeans.modules.ada.editor.parser.AdaParser.Context;
raster@14180
    49
import org.netbeans.modules.ada.editor.ast.ASTError;
raster@14180
    50
import org.netbeans.modules.ada.editor.ast.ASTNode;
raster@14180
    51
import org.netbeans.modules.ada.editor.ast.nodes.Program;
raster@15779
    52
import org.netbeans.modules.csl.api.Severity;
raster@14180
    53
import org.openide.util.NbBundle;
raster@15779
    54
import org.netbeans.modules.csl.api.Error;
raster@14180
    55
raster@14180
    56
/**
raster@14180
    57
 * Based on org.netbeans.modules.php.editor.parser.PHP5ErrorHandler
raster@14180
    58
 *
raster@14180
    59
 * @author Andrea Lucarelli
raster@14180
    60
 */
raster@14180
    61
public class Ada95ErrorHandler implements ParserErrorHandler {
raster@14180
    62
raster@14180
    63
    private static final Logger LOGGER = Logger.getLogger(Ada95ErrorHandler.class.getName());
raster@14180
    64
    
raster@14180
    65
    public static class SyntaxError {
raster@14180
    66
        private final short[] expectedTokens;
raster@14180
    67
        private final Symbol currentToken;
raster@14180
    68
        private final Symbol previousToken;
raster@15779
    69
raster@14180
    70
        public SyntaxError(short[] expectedTokens, Symbol currentToken, Symbol previousToken) {
raster@14180
    71
            this.expectedTokens = expectedTokens;
raster@14180
    72
            this.currentToken = currentToken;
raster@14180
    73
            this.previousToken = previousToken;
raster@14180
    74
        }
raster@14180
    75
raster@14180
    76
        public Symbol getCurrentToken() {
raster@14180
    77
            return currentToken;
raster@14180
    78
        }
raster@14180
    79
raster@14180
    80
        public Symbol getPreviousToken() {
raster@14180
    81
            return previousToken;
raster@14180
    82
        }
raster@14180
    83
raster@14180
    84
        public short[] getExpectedTokens() {
raster@14180
    85
            return expectedTokens;
raster@14180
    86
        }
raster@14180
    87
    }
raster@14180
    88
    
raster@14180
    89
    private final List<SyntaxError> syntaxErrors;
raster@14180
    90
raster@14180
    91
    private final Context context;
raster@14180
    92
    AdaParser outer;
raster@14180
    93
raster@14180
    94
    public Ada95ErrorHandler(Context context, AdaParser outer) {
raster@14180
    95
        super();
raster@14180
    96
        this.outer = outer;
raster@14180
    97
        this.context = context;
raster@14180
    98
        syntaxErrors = new ArrayList<SyntaxError>();
raster@16367
    99
        //LOGGER.setLevel(Level.FINE);
raster@14180
   100
    }
raster@14180
   101
raster@14180
   102
    public void handleError(Type type, short[] expectedtokens, Symbol current, Symbol previous) {
raster@14180
   103
        Error error;
raster@14180
   104
        if (type == ParserErrorHandler.Type.SYNTAX_ERROR) {
raster@14180
   105
            // logging syntax error
raster@16367
   106
            if (LOGGER.isLoggable(Level.FINE)) {
raster@16367
   107
                LOGGER.fine("Syntax error:"); //NOI18N
raster@16367
   108
                LOGGER.fine("Current [" + current.left + ", " + current.right + "](" + Utils.getASTScannerTokenName(current.sym) + "): " + current.value); //NOI18N
raster@16367
   109
                LOGGER.fine("Previous [" + previous.left + ", " + previous.right + "] (" + Utils.getASTScannerTokenName(previous.sym) + "):" + previous.value); //NOI18N
raster@14180
   110
                StringBuffer message = new StringBuffer();
raster@14180
   111
                message.append("Expected tokens:"); //NOI18N
raster@14180
   112
                for (int i = 0; i < expectedtokens.length; i += 2) {
raster@14180
   113
                    message.append(" ").append( Utils.getASTScannerTokenName(expectedtokens[i])); //NOI18N
raster@14180
   114
                }
raster@16367
   115
                LOGGER.fine(message.toString());
raster@14180
   116
            }
raster@14180
   117
            syntaxErrors.add(new SyntaxError(expectedtokens, current, previous));
raster@15779
   118
        } else {
raster@14180
   119
            String message = null;
raster@14180
   120
            if (current != null) {
raster@14180
   121
                String tagText = getTokenTextForm(current.sym);
raster@14180
   122
                if (tagText != null) {
raster@14180
   123
                    message = NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Unexpected") + " " + tagText;
raster@14180
   124
                }
raster@14180
   125
                else {
raster@14180
   126
                    message = NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Unexpected") + " " + Utils.getASTScannerTokenName(current.sym);
raster@14180
   127
                }
raster@14180
   128
            }
raster@14180
   129
            if (message == null) {
raster@14180
   130
                message = "Parser error"; // NOI18N
raster@14180
   131
            }
raster@15779
   132
            error = new AdaError(message, context.getSnapshot().getSource().getFileObject(), current.left, current.right, Severity.ERROR, null);
raster@15779
   133
            //context.getListener().error(error);
raster@14180
   134
        }
raster@14180
   135
    }
raster@14180
   136
raster@14180
   137
    public void handleError(Type type, Symbol symbol, String message) {
raster@14180
   138
        Error error;
raster@14180
   139
        if (symbol != null) {
raster@14180
   140
            if (message == null) {
raster@14180
   141
                message = "Parser error";
raster@14180
   142
            }
raster@15779
   143
            error = new AdaError(message,  context.getSnapshot().getSource().getFileObject(), symbol.left, symbol.right, Severity.ERROR, null);
raster@15779
   144
            //TODO: context.getListener().error(error);
raster@14180
   145
        }
raster@14180
   146
    }
raster@15779
   147
raster@15779
   148
    public List<Error> displayFatalError(){
raster@15779
   149
        Error error = new FatalError();
raster@15779
   150
        return Arrays.asList(error);
raster@15779
   151
    }
raster@14180
   152
    
raster@15779
   153
    public List<Error>  displaySyntaxErrors(Program program) {
raster@15779
   154
        List<Error> errors = new ArrayList<Error>();
raster@14180
   155
        for (SyntaxError syntaxError : syntaxErrors) {
raster@14180
   156
            ASTNode astError = null;
raster@14180
   157
            if (program != null) {
raster@14180
   158
                astError = org.netbeans.modules.ada.editor.ast.ASTUtils.getNodeAtOffset(program, syntaxError.currentToken.left);
raster@14180
   159
                if (!(astError instanceof ASTError)) {
raster@14180
   160
                    astError = org.netbeans.modules.ada.editor.ast.ASTUtils.getNodeAtOffset(program, syntaxError.previousToken.right);
raster@14180
   161
                    if (!(astError instanceof ASTError)) {
raster@14180
   162
                        astError = null;
raster@14180
   163
                    }
raster@14180
   164
                }
raster@14180
   165
                if (astError != null) {
raster@16367
   166
                    LOGGER.fine("ASTError [" + astError.getStartOffset() + ", " + astError.getEndOffset() + "]"); //NOI18N
raster@14180
   167
                } else {
raster@16367
   168
                    LOGGER.fine("ASTError was not found");  //NOI18N
raster@14180
   169
                }
raster@14180
   170
            }
raster@14180
   171
            Error error = defaultSyntaxErrorHandling(syntaxError, astError);
raster@15779
   172
            errors.add(error);
raster@14180
   173
        }
raster@15779
   174
        return errors;
raster@14180
   175
    }
raster@14180
   176
    
raster@14180
   177
    // This is just defualt handling. We can do a logic, which will find metter 
raster@14180
   178
    private Error defaultSyntaxErrorHandling(SyntaxError syntaxError, ASTNode astError) {
raster@14180
   179
        Error error = null;
raster@14180
   180
        String unexpectedText = "";     //NOI18N
raster@14180
   181
        StringBuffer message = new StringBuffer();
raster@14180
   182
        boolean isUnexpected = false;
raster@14180
   183
        int start  = syntaxError.getCurrentToken().left;
raster@14180
   184
        int end = syntaxError.getCurrentToken().right;
raster@14180
   185
        
raster@14180
   186
        if (syntaxError.getCurrentToken().sym == Ada95ASTSymbols.EOF) {
raster@14180
   187
            isUnexpected = true;
raster@14180
   188
            unexpectedText = NbBundle.getMessage(Ada95ErrorHandler.class, "SE_EOF");
raster@14180
   189
            start = end - 1;
raster@14180
   190
        }
raster@14180
   191
        else {
raster@14180
   192
            String currentText = (String)syntaxError.getCurrentToken().value;
raster@14180
   193
            isUnexpected = currentText != null && currentText.trim().length() > 0;
raster@14180
   194
            if (isUnexpected) {
raster@14180
   195
                unexpectedText = currentText.trim();
raster@14180
   196
                end = start + unexpectedText.length();
raster@14180
   197
            }
raster@14180
   198
        }
raster@14180
   199
        
raster@14180
   200
        List<String> possibleTags = new ArrayList<String>();
raster@14180
   201
        for (int i = 0; i < syntaxError.getExpectedTokens().length; i += 2) {
raster@14180
   202
            String text = getTokenTextForm(syntaxError.getExpectedTokens()[i]);
raster@14180
   203
            if (text != null) {
raster@14180
   204
                possibleTags.add(text);
raster@14180
   205
            }
raster@14180
   206
        }
raster@14180
   207
raster@14180
   208
        message.append(NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Message"));
raster@14180
   209
        message.append(':'); //NOI18N
raster@14180
   210
        if (isUnexpected) {
raster@14180
   211
            message.append(' ').append(NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Unexpected"));
raster@14180
   212
            message.append(": "); //NOI18N
raster@14180
   213
            message.append(unexpectedText);
raster@14180
   214
        }
raster@14180
   215
        if (possibleTags.size() > 0) {
raster@14180
   216
            message.append('\n').append(NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Expected"));
raster@14180
   217
            message.append(": "); //NOI18N
raster@14180
   218
            boolean addOR = false;
raster@14180
   219
            for (String tag : possibleTags) {
raster@14180
   220
                if (addOR) {
raster@14180
   221
                    message.append(" " + NbBundle.getMessage(Ada95ErrorHandler.class, "SE_Or") + " ");
raster@14180
   222
                }
raster@14180
   223
                else {
raster@14180
   224
                    addOR = true;
raster@14180
   225
                }
raster@14180
   226
                
raster@14180
   227
                message.append(tag);
raster@14180
   228
            }
raster@14180
   229
        }
raster@14180
   230
raster@14180
   231
        if (astError != null){
raster@14180
   232
            start = astError.getStartOffset();
raster@14180
   233
            end = astError.getEndOffset();
raster@14180
   234
            // if the asterror is trough two lines, the problem is ussually at the end
raster@14180
   235
            String text = context.getSource().substring(start, end);
raster@14180
   236
            int lastNewLine = text.length()-1;
raster@14180
   237
            while (text.charAt(lastNewLine) == '\n' || text.charAt(lastNewLine) == '\r'
raster@14180
   238
                    || text.charAt(lastNewLine) == '\t' || text.charAt(lastNewLine) == ' ') {
raster@14180
   239
                lastNewLine--;
raster@14180
   240
                if (lastNewLine < 0) {
raster@14180
   241
                    break;
raster@14180
   242
                }
raster@14180
   243
            }
raster@14180
   244
            lastNewLine = text.lastIndexOf('\n', lastNewLine);   //NOI18N
raster@14180
   245
            if (lastNewLine > 0) {
raster@14180
   246
                start = start + lastNewLine + 1;
raster@14180
   247
            }
raster@14180
   248
        }
raster@15779
   249
        error = new AdaError(message.toString(), context.getSnapshot().getSource().getFileObject(), start, end, Severity.ERROR, new Object[]{syntaxError});
raster@14180
   250
        return error;
raster@14180
   251
    }
raster@14180
   252
raster@14180
   253
    public List<SyntaxError> getSyntaxErrors() {
raster@14180
   254
        return syntaxErrors;
raster@14180
   255
    }
raster@14180
   256
raster@14180
   257
    private String getTokenTextForm (int token) {
raster@14180
   258
        String text = null;
raster@14180
   259
        switch (token) {
raster@14180
   260
            case Ada95ASTSymbols.BASED_LITERAL : text = "number"; break; //NOI18N
raster@14180
   261
            case Ada95ASTSymbols.DECIMAL_LITERAL : text = "number"; break; //NOI18N
raster@14180
   262
            case Ada95ASTSymbols.IDENTIFIER : text = "identifier"; break; //NOI18N
raster@14180
   263
            case Ada95ASTSymbols.ABORT : text = "abort"; break; //NOI18N
raster@14180
   264
            case Ada95ASTSymbols.ABS : text = "abs"; break; //NOI18N
raster@14180
   265
            case Ada95ASTSymbols.ABSTRACT : text = "abstract"; break; //NOI18N
raster@14180
   266
            case Ada95ASTSymbols.ACCESS : text = "access"; break; //NOI18N
raster@14180
   267
            case Ada95ASTSymbols.ACCEPT : text = "access"; break; //NOI18N
raster@14180
   268
            case Ada95ASTSymbols.ALIASED : text = "aliased"; break; //NOI18N
raster@14180
   269
            case Ada95ASTSymbols.ALL : text = "all"; break; //NOI18N
raster@14180
   270
            case Ada95ASTSymbols.AND : text = "and"; break; //NOI18N
raster@14180
   271
            case Ada95ASTSymbols.ARRAY : text = "array"; break; //NOI18N
raster@14180
   272
            case Ada95ASTSymbols.AT : text = "at"; break; //NOI18N
raster@14180
   273
            case Ada95ASTSymbols.BEGIN : text = "begin"; break; //NOI18N
raster@14180
   274
            case Ada95ASTSymbols.BODY : text = "body"; break; //NOI18N
raster@14180
   275
            case Ada95ASTSymbols.CONSTANT : text = "constant"; break; //NOI18N
raster@14180
   276
            case Ada95ASTSymbols.CASE : text = "case"; break; //NOI18N
raster@14180
   277
            case Ada95ASTSymbols.DECLARE : text = "declare"; break; //NOI18N
raster@14180
   278
            case Ada95ASTSymbols.DELAY : text = "delay"; break; //NOI18N
raster@14180
   279
            case Ada95ASTSymbols.DELTA : text = "delta"; break; //NOI18N
raster@14180
   280
            case Ada95ASTSymbols.DIGITS : text = "digits"; break; //NOI18N
raster@14180
   281
            case Ada95ASTSymbols.DO : text = "do"; break; //NOI18N
raster@14180
   282
            case Ada95ASTSymbols.ELSE : text = "else"; break; //NOI18N
raster@14180
   283
            case Ada95ASTSymbols.ELSIF : text = "elsif"; break; //NOI18N
raster@14180
   284
            case Ada95ASTSymbols.END : text = "end"; break; //NOI18N
raster@14180
   285
            case Ada95ASTSymbols.ENTRY : text = "entry"; break; //NOI18N
raster@14180
   286
            case Ada95ASTSymbols.EXCEPTION : text = "exception"; break; //NOI18N
raster@14180
   287
            case Ada95ASTSymbols.EXIT : text = "exit"; break; //NOI18N
raster@14180
   288
            case Ada95ASTSymbols.FOR : text = "for"; break; //NOI18N
raster@14180
   289
            case Ada95ASTSymbols.FUNCTION : text = "function"; break; //NOI18N
raster@14180
   290
            case Ada95ASTSymbols.GENERIC : text = "generic"; break; //NOI18N
raster@14180
   291
            case Ada95ASTSymbols.GOTO : text = "goto"; break; //NOI18N
raster@14180
   292
            case Ada95ASTSymbols.IF : text = "if"; break; //NOI18N
raster@14180
   293
            case Ada95ASTSymbols.IN : text = "in"; break; //NOI18N
raster@14180
   294
            case Ada95ASTSymbols.IS : text = "is"; break; //NOI18N
raster@14180
   295
            case Ada95ASTSymbols.LIMITED : text = "limited"; break; //NOI18N
raster@14180
   296
            case Ada95ASTSymbols.LOOP : text = "loop"; break; //NOI18N
raster@14180
   297
            case Ada95ASTSymbols.MOD : text = "mod"; break; //NOI18N
raster@14180
   298
            case Ada95ASTSymbols.NEW : text = "new"; break; //NOI18N
raster@14180
   299
            case Ada95ASTSymbols.NOT : text = "not"; break; //NOI18N
raster@14180
   300
            case Ada95ASTSymbols.NULL : text = "null"; break; //NOI18N
raster@14180
   301
            case Ada95ASTSymbols.OF : text = "of"; break; //NOI18N
raster@14180
   302
            case Ada95ASTSymbols.OR : text = "or"; break; //NOI18N
raster@14180
   303
            case Ada95ASTSymbols.OTHERS : text = "others"; break; //NOI18N
raster@14180
   304
            case Ada95ASTSymbols.OUT : text = "out"; break; //NOI18N
raster@14180
   305
            case Ada95ASTSymbols.PACKAGE : text = "package"; break; //NOI18N
raster@14180
   306
            case Ada95ASTSymbols.PRAGMA : text = "pragma"; break; //NOI18N
raster@14180
   307
            case Ada95ASTSymbols.PRIVATE : text = "private"; break; //NOI18N
raster@14180
   308
            case Ada95ASTSymbols.PROCEDURE : text = "procedure"; break; //NOI18N
raster@14180
   309
            case Ada95ASTSymbols.PROTECTED : text = "protected"; break; //NOI18N
raster@14180
   310
            case Ada95ASTSymbols.RETURN : text = "return"; break; //NOI18N
raster@14180
   311
            case Ada95ASTSymbols.REVERSE : text = "reverse"; break; //NOI18N
raster@14180
   312
            case Ada95ASTSymbols.RAISE : text = "raise"; break; //NOI18N
raster@14180
   313
            case Ada95ASTSymbols.RANGE : text = "range"; break; //NOI18N
raster@14180
   314
            case Ada95ASTSymbols.RECORD : text = "record"; break; //NOI18N
raster@14180
   315
            case Ada95ASTSymbols.REM : text = "rem"; break; //NOI18N
raster@14180
   316
            case Ada95ASTSymbols.RENAMES : text = "renames"; break; //NOI18N
raster@14180
   317
            case Ada95ASTSymbols.REQUEUE : text = "requeue"; break; //NOI18N
raster@14180
   318
            case Ada95ASTSymbols.SELECT : text = "select"; break; //NOI18N
raster@14180
   319
            case Ada95ASTSymbols.SEPARATE : text = "separate"; break; //NOI18N
raster@14180
   320
            case Ada95ASTSymbols.SUBTYPE : text = "subtype"; break; //NOI18N
raster@14180
   321
            case Ada95ASTSymbols.TAGGED : text = "tagged"; break; //NOI18N
raster@14180
   322
            case Ada95ASTSymbols.TASK : text = "task"; break; //NOI18N
raster@14180
   323
            case Ada95ASTSymbols.TERMINATE : text = "terminate"; break; //NOI18N
raster@14180
   324
            case Ada95ASTSymbols.THEN : text = "then"; break; //NOI18N
raster@14180
   325
            case Ada95ASTSymbols.TYPE : text = "type"; break; //NOI18N
raster@14180
   326
            case Ada95ASTSymbols.UNTIL : text = "until"; break; //NOI18N
raster@14180
   327
            case Ada95ASTSymbols.USE : text = "use"; break; //NOI18N
raster@14180
   328
            case Ada95ASTSymbols.WHEN : text = "when"; break; //NOI18N
raster@14180
   329
            case Ada95ASTSymbols.WHILE : text = "while"; break; //NOI18N
raster@14180
   330
            case Ada95ASTSymbols.WITH : text = "with"; break; //NOI18N
raster@14180
   331
            case Ada95ASTSymbols.XOR : text = "xor"; break; //NOI18N
raster@14180
   332
            case Ada95ASTSymbols.AMP : text = "&"; break; //NOI18N
raster@14180
   333
            case Ada95ASTSymbols.TICK : text = "'"; break; //NOI18N
raster@14180
   334
            case Ada95ASTSymbols.LPAREN : text = "("; break; //NOI18N
raster@14180
   335
            case Ada95ASTSymbols.RPAREN : text = ")"; break; //NOI18N
raster@14180
   336
            case Ada95ASTSymbols.STAR : text = "*"; break; //NOI18N
raster@14180
   337
            case Ada95ASTSymbols.PLUS : text = "+"; break; //NOI18N
raster@14180
   338
            case Ada95ASTSymbols.COMMA : text = ","; break; //NOI18N
raster@14180
   339
            case Ada95ASTSymbols.MINUS : text = "-"; break; //NOI18N
raster@14180
   340
            case Ada95ASTSymbols.DOT : text = "."; break; //NOI18N
raster@14180
   341
            case Ada95ASTSymbols.SLASH : text = "/"; break; //NOI18N
raster@14180
   342
            case Ada95ASTSymbols.COLON : text = ":"; break; //NOI18N
raster@14180
   343
            case Ada95ASTSymbols.SEMICOLON : text = ";"; break; //NOI18N
raster@14180
   344
            case Ada95ASTSymbols.GT : text = "<"; break; //NOI18N
raster@14180
   345
            case Ada95ASTSymbols.EQ : text = "="; break; //NOI18N
raster@14180
   346
            case Ada95ASTSymbols.LT : text = ">"; break; //NOI18N
raster@14180
   347
            case Ada95ASTSymbols.BAR : text = "|"; break; //NOI18N
raster@14180
   348
            case Ada95ASTSymbols.ARROW : text = "=>"; break; //NOI18N
raster@14180
   349
            case Ada95ASTSymbols.DOT_DOT : text = ".."; break; //NOI18N
raster@15779
   350
            case Ada95ASTSymbols.EXPON : text = "**"; break; //NOI18N
raster@14180
   351
            case Ada95ASTSymbols.ASSIGNMENT : text = ":="; break; //NOI18N
raster@14180
   352
            case Ada95ASTSymbols.INEQ : text = "/="; break; //NOI18N
raster@14180
   353
            case Ada95ASTSymbols.GTEQ : text = ">="; break; //NOI18N
raster@14180
   354
            case Ada95ASTSymbols.LTEQ : text = "<="; break; //NOI18N
raster@14180
   355
            case Ada95ASTSymbols.LTLT : text = "<<"; break; //NOI18N
raster@14180
   356
            case Ada95ASTSymbols.GTGT : text = ">>"; break; //NOI18N
raster@14180
   357
            case Ada95ASTSymbols.BOX : text = "<>"; break; //NOI18N
raster@14180
   358
        }
raster@14180
   359
        return text;
raster@14180
   360
    }
raster@15779
   361
raster@15779
   362
    private class FatalError extends AdaError{
raster@15779
   363
        FatalError(){
raster@15779
   364
            super(NbBundle.getMessage(Ada95ErrorHandler.class, "MSG_FatalError"),
raster@15779
   365
                context.getSnapshot().getSource().getFileObject(),
raster@15779
   366
                0, context.getSource().length(),
raster@15779
   367
                Severity.ERROR, null);
raster@15779
   368
        }
raster@15779
   369
raster@15779
   370
        @Override
raster@15779
   371
        public boolean isLineError() {
raster@15779
   372
            return false;
raster@15779
   373
        }
raster@15779
   374
    }
raster@14180
   375
}