[antlr-interest] Bad Feature in 2.7.1: System.exit()

gidadoifiok gidadoifiok at yahoo.com
Thu Jan 17 10:18:24 PST 2002


I'm using ANT, and well the 'antlr' tasks in ANT 1.4 is
broken (supposed to be fixed in 1.5), but that's now why
I'm writing.  I had to write my own task, that calls
'antlr.Tool.main()'.  That way I can write 'ant antlr'
and generate my lexer/parsers.  However, I cannot do an
'ant antlr test' (i.e. do two targets back to back); the
reason is that antlr exits using System.exit()!  This is
bad form, as you are not able to integrate antlr into
other products well.

Here's what I suggest:
  1. create an new runtime Exception called SYSTEM.EXIT
     with a method 'public int getExitCode()'
  2. trap this exception in antlr.Tool.main() like so:

     try {
        ...
     } catch (SystemExitException see) {
       return see.getExitCode();
     } 

This way, you're able able to return control to the calling
method (i.e. the method that called antlr.Tool.main()) and
letting the calling method decide what to do.  (In the case
of the JVM making the call, then it will exit as expected
just as if you had done a System.exit()).  This makes the
code more reusable in my opinion.

- Gidado

Here are all the System.exit()s I found (man, there all
over the place!)  It's even down in the parser!  Perhaps
the panic() method should throw a PanicException, a type
of RuntimeException....

File:   D:\java\ext\antlr-2.7.1\antlr\CharScanner.java
  Pos (226,5):  System.exit(1);
  Pos (231,5):  System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\CppCodeGenerator.java
  Pos (97,13):    System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\debug\LLkDebuggingParser.java
  Pos (220,17):     System.exit(1);
  Pos (229,13):    System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\debug\misc\ASTFrame.java
  Pos (49,16):    // System.exit(0);
File:   D:\java\ext\antlr-2.7.1\antlr\DiagnosticCodeGenerator.java
  Pos (54,21):      System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\HTMLCodeGenerator.java
  Pos (58,21):      System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\JavaCodeGenerator.java
  Pos (83,9):      System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\Parser.java
  Pos (206,5):  System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\SatherCodeGenerator.java
  Pos (79,9):      System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\Tool.java
  Pos (156,9):      System.exit(1);
  Pos (175,9):   System.exit(1);
  Pos (208,9):      System.exit(1);
  Pos (212,9):      System.exit(1);
  Pos (214,5):  System.exit(0);
  Pos (334,5):  System.exit(0);
  Pos (350,9):      System.exit(1);
  Pos (358,5):  System.exit(1);
  Pos (366,5):  System.exit(1);
File:   D:\java\ext\antlr-2.7.1\antlr\TreeParser.java
  Pos (84,9):   System.exit(1);


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list