2014-12-09 4 views
2

Я использую Netbeans и получить следующую ошибку, делая ANTLR Lexer:CSV Лексер не может найти лексический класс

C: \ Users \ Атауальпа \ Documents \ NetBeansProjects \ antlr4CSV \ SRC \ antlr4csv \ Antlr4CSV.java: 26: ошибка: не удается найти символ CSVLexer lexer = новый CSVLexer (новый ANTLRStringStream (источник)); символ: класс CSVLexer местоположение: класс Antlr4CSV

CSVLexer.java существует. См. Следующий рисунок.

http://gyazo.com/084b85175c0cf8b6029bbd255e39d379

Проверка Compile и Сохранить дает еще одну ошибку.

В учебнике я хочу следующее: http://bkiers.blogspot.nl/2011/03/2-introduction-to-antlr.html

AntlrCSV.java:

package antlr4csv; 

import org.antlr.runtime.*; 

public class Antlr4CSV { 
    public static void main(String[] args) throws Exception { 
    // the input source 
    String source = 
     "value1,value2,\"value3.1,\"\",value3.2\"" + "\n" + 
     "\"line\nbreak\",Bbb,end"; 

    // create an instance of the lexer 
    CSVLexer lexer = new CSVLexer(new ANTLRStringStream(source)); 

    // wrap a token-stream around the lexer 
    CommonTokenStream tokens = new CommonTokenStream(lexer); 

    // when using ANTLR v3.3 or v3.4, un-comment the next line: 
    //tokens.fill(); 

    // traverse the tokens and print them to see if the correct tokens are created 
    int n = 1; 
    for(Object o : tokens.getTokens()) { 
     CommonToken token = (CommonToken)o; 
     System.out.println("token(" + n + ") = " + token.getText().replace("\n", "\\n")); 
     n++; 
    } 

CSVLexer.java:

// Generated from CSVLexer.g4 by ANTLR 4.4 
import org.antlr.v4.runtime.Lexer; 
import org.antlr.v4.runtime.CharStream; 
import org.antlr.v4.runtime.Token; 
import org.antlr.v4.runtime.TokenStream; 
import org.antlr.v4.runtime.*; 
import org.antlr.v4.runtime.atn.*; 
import org.antlr.v4.runtime.dfa.DFA; 
import org.antlr.v4.runtime.misc.*; 
import antlr4csv.Antlr4CSV; 

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) 
public class CSVLexer extends Lexer { 
    static { RuntimeMetaData.checkVersion("4.4", RuntimeMetaData.VERSION); } 

    protected static final DFA[] _decisionToDFA; 
    protected static final PredictionContextCache _sharedContextCache = 
     new PredictionContextCache(); 
    public static final int 
     Comma=1, LineBreak=2, SimpleValue=3, QuotedValue=4; 
    public static String[] modeNames = { 
     "DEFAULT_MODE" 
    }; 

    public static final String[] tokenNames = { 
     "'\\u0000'", "'\\u0001'", "'\\u0002'", "'\\u0003'", "'\\u0004'" 
    }; 
    public static final String[] ruleNames = { 
     "Comma", "LineBreak", "SimpleValue", "QuotedValue" 
    }; 


    public CSVLexer(CharStream input) { 
     super(input); 
     _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); 
    } 

    @Override 
    public String getGrammarFileName() { return "CSVLexer.g4"; } 

    @Override 
    public String[] getTokenNames() { return tokenNames; } 

    @Override 
    public String[] getRuleNames() { return ruleNames; } 

    @Override 
    public String getSerializedATN() { return _serializedATN; } 

    @Override 
    public String[] getModeNames() { return modeNames; } 

    @Override 
    public ATN getATN() { return _ATN; } 

    public static final String _serializedATN = 
     "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\6\"\b\1\4\2\t\2\4"+ 
     "\3\t\3\4\4\t\4\4\5\t\5\3\2\3\2\3\3\5\3\17\n\3\3\3\3\3\3\4\6\4\24\n\4\r"+ 
     "\4\16\4\25\3\5\3\5\3\5\3\5\7\5\34\n\5\f\5\16\5\37\13\5\3\5\3\5\2\2\6\3"+ 
     "\3\5\4\7\5\t\6\3\2\4\6\2\f\f\17\17$$..\3\2$$%\2\3\3\2\2\2\2\5\3\2\2\2"+ 
     "\2\7\3\2\2\2\2\t\3\2\2\2\3\13\3\2\2\2\5\16\3\2\2\2\7\23\3\2\2\2\t\27\3"+ 
     "\2\2\2\13\f\7.\2\2\f\4\3\2\2\2\r\17\7\17\2\2\16\r\3\2\2\2\16\17\3\2\2"+ 
     "\2\17\20\3\2\2\2\20\21\7\f\2\2\21\6\3\2\2\2\22\24\n\2\2\2\23\22\3\2\2"+ 
     "\2\24\25\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2\26\b\3\2\2\2\27\35\7$\2\2"+ 
     "\30\31\7$\2\2\31\34\7$\2\2\32\34\n\3\2\2\33\30\3\2\2\2\33\32\3\2\2\2\34"+ 
     "\37\3\2\2\2\35\33\3\2\2\2\35\36\3\2\2\2\36 \3\2\2\2\37\35\3\2\2\2 !\7"+ 
     "$\2\2!\n\3\2\2\2\7\2\16\25\33\35\2"; 
    public static final ATN _ATN = 
     new ATNDeserializer().deserialize(_serializedATN.toCharArray()); 
    static { 
     _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; 
     for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { 
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); 
     } 
    } 
} 

ответ

0

Это руководство предназначено для v3 и v4 you'r использованием. ANTLRStringStream больше не доступен в версии 4.

Попробуйте это:

CSVLexer lexer = new CSVLexer(new ANTLRInputStream("a,b,\"c\"\"c\"")); 
CommonTokenStream tokens = new CommonTokenStream(lexer); 
tokens.fill(); 

for (Token token : tokens.getTokens()) { 
    if (token.getType() == Token.EOF) { 
     break; 
    } 
    System.out.printf("%-12s --> %s\n", CSVLexer.ruleNames[token.getType() - 1], token.getText()); 
} 

, который будет печатать:

SimpleValue --> a 
Comma  --> , 
SimpleValue --> b 
Comma  --> , 
QuotedValue --> "c""c"
+0

я получаю ту же ошибку, используя каждый раз ANTLRInputstream. – Manu

+0

@ user3137368 вам нужен 'ANTLRInputStream', а не' ANTLRStringStream', если вы используете v4. Но теперь я вижу, что ваша IDE не может найти «CSVLexer», который либо не создан вами, либо вашей IDE, либо не добавлен в путь к среде IDE. Код, который я опубликовал, работает точно: я проверил его с v4.3. –

Смежные вопросы