ANTLR API问题;示例+解决方法提供;需要解释

时间:2011-12-19 11:19:53

标签: java antlr

我使用ANTLRWorks创建了以下Lexer。 (另见http://bkiers.blogspot.com/2011/03/2-introduction-to-antlr.html#intro

 // CSVLexer.g
 lexer grammar CSVLexer;

 @lexer::header {
   package graphica.parsers;
 }

 Comma   
   :  ','  
   ;  

 LineBreak  
  :  '\r'? '\n'  
  |  '\r'  
  ;  

 SimpleValue  
   :  ~(',' | '\r' | '\n' | '"')+  
   ;  

 QuotedValue  
   :  '"' ('""' | ~'"')* '"'  
   ;  

我使用以下Java类来测试Lexer。

 /**
  *
  * @author Nilo
  */
 import org.antlr.runtime.*;

 public class CSVLexerTest {

 public static void main(String[] args) throws Exception {
    // the input source  
    String source =
            "val1, value2, value3, value3.2" + "\n"
            + "\"line\nbreak\",ABAbb,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);


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

上面的类(来自同一个教程)不会产生任何输出。但是,如果我在令牌循环之前插入一个tokens.toString(),那么将按预期打印输出。

注意:我使用ANTLWorks 1.4.3,ANTLR 3.4,在Windows 7上使用JDK 1.7 / 64bit

问题:我不明白这一点。请解释。应该有一种方法可以在没有tokens.toString()

的情况下使其工作

0 个答案:

没有答案