Upgrading to ANTLR 3.0.1 on Mac OS X TigerEdit
I held off on this upgrade for a while because the 3.x series of ANTLR is still fairly young and I had a working recognizer and didn’t want to risk breaking it (in order to get my 3.0 recognizer working I’d had to make a couple of patches to the source and rebuild, and I wasn’t sure if all or any of these patches had been accepted upstream into ANTLR for 3.0.1).
Upgrade procedure
# grab the source
wget "http://antlr.org/download/antlr-3.0.1.tar.gz"
tar xzvf antlr-3.0.1.tar.gz
# move it into place
sudo mv antlr-3.0.1 /usr/local/
# replace the old symbolic link
sudo rm -f /usr/local/antlr
$(cd /usr/local && sudo ln -s antlr-3.0.1 antlr)
# update the CLASSPATH environment variable
# stick it in your ~/.bash_profile as well for good measure
export CLASSPATH=".:/usr/local/antlr/lib/antlr-3.0.1.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-2.7.7.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-runtime-3.0.1.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/stringtemplate-3.1b1.jar"
# now build C target runtime
tar xzvf antlr-3.0.1.tar.gz
cd antlr-3.0.1/runtime/C/dist
tar xzvf libantlr3c-3.0.1.tar.gz
cd libantlr3c-3.0.1
./configure
make
# doesn't do anything yet
make check
# actually install
sudo make install
Testing
# grab the source
wget "http://antlr.org/download/antlr-3.0.1.tar.gz"
tar xzvf antlr-3.0.1.tar.gz
# move it into place
sudo mv antlr-3.0.1 /usr/local/
# replace the old symbolic link
sudo rm -f /usr/local/antlr
$(cd /usr/local && sudo ln -s antlr-3.0.1 antlr)
# update the CLASSPATH environment variable
# stick it in your ~/.bash_profile as well for good measure
export CLASSPATH=".:/usr/local/antlr/lib/antlr-3.0.1.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-2.7.7.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-runtime-3.0.1.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/stringtemplate-3.1b1.jar"
# now build C target runtime
tar xzvf antlr-3.0.1.tar.gz
cd antlr-3.0.1/runtime/C/dist
tar xzvf libantlr3c-3.0.1.tar.gz
cd libantlr3c-3.0.1
./configure
make
# doesn't do anything yet
make check
# actually install
sudo make install
Unfortunately the new version does break my existing recognizer.
Before
$ ./wiki_text_spec.rb
............................................................................................................................................................
Finished in 0.075629 seconds
156 examples, 0 failures
After
$ ./wiki_text_spec.rb
../wiki_text_spec.rb:21: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i686-darwin8.8.1]
Abort trap
$ ./wiki_text_spec.rb
............................................................................................................................................................
Finished in 0.075629 seconds
156 examples, 0 failures
$ ./wiki_text_spec.rb
../wiki_text_spec.rb:21: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i686-darwin8.8.1]
Abort trap
The full stack trace looks like this:
Thread 0 Crashed:
0 <<00000000>> 0xffff07c2 __memcpy + 34 (cpu_capabilities.h:228)
1 ruby 0x0006ba8b str_new + 79 (string.c:96)
2 wiki_text.bundle 0x005a691c wiki_text_parser_parse + 5256 (wiki_text.c:1089)
3 ruby 0x00003453 call_cfunc + 486 (eval.c:5659)
4 ruby 0x0000c0d1 rb_call0 + 666 (eval.c:5815)
5 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
6 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
7 ruby 0x0000a0c6 rb_eval + 7399 (eval.c:3441)
8 ruby 0x0000a0c6 rb_eval + 7399 (eval.c:3441)
9 ruby 0x0001010d rb_yield_0 + 1102 (eval.c:4991)
10 ruby 0x000111e4 yield_under_i + 43 (eval.c:6656)
11 ruby 0x00003969 exec_under + 442 (eval.c:6605)
12 ruby 0x000039ca specific_eval + 60 (eval.c:6704)
13 ruby 0x00003453 call_cfunc + 486 (eval.c:5659)
14 ruby 0x0000c0d1 rb_call0 + 666 (eval.c:5815)
15 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
16 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
17 ruby 0x00016a10 block_pass + 726 (eval.c:8896)
18 ruby 0x000095c2 rb_eval + 4579 (eval.c:3163)
19 ruby 0x0000b231 rb_eval + 11858 (eval.c:3263)
20 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
21 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
22 ruby 0x000096ef rb_eval + 4880 (eval.c:3462)
23 ruby 0x0000a949 rb_eval + 9578 (eval.c:3638)
24 ruby 0x0001010d rb_yield_0 + 1102 (eval.c:4991)
25 ruby 0x00009f69 rb_eval + 7050 (eval.c:3252)
26 ruby 0x00009f1c rb_eval + 6973 (eval.c:3391)
27 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
28 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
29 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
30 ruby 0x0000ba9f rb_eval + 14016 (eval.c:3177)
31 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
32 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
33 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
34 ruby 0x0001010d rb_yield_0 + 1102 (eval.c:4991)
35 ruby 0x00011305 rb_yield + 33 (eval.c:5074)
36 ruby 0x0007c011 rb_ary_each + 43 (array.c:1137)
37 ruby 0x0000c0d1 rb_call0 + 666 (eval.c:5815)
38 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
39 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
40 ruby 0x0000ba9f rb_eval + 14016 (eval.c:3177)
41 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
42 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
43 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
44 ruby 0x0001010d rb_yield_0 + 1102 (eval.c:4991)
45 ruby 0x00011305 rb_yield + 33 (eval.c:5074)
46 ruby 0x0007c011 rb_ary_each + 43 (array.c:1137)
47 ruby 0x0000c0d1 rb_call0 + 666 (eval.c:5815)
48 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
49 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
50 ruby 0x0000ba9f rb_eval + 14016 (eval.c:3177)
51 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
52 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
53 ruby 0x0000a891 rb_eval + 9394 (eval.c:3468)
54 ruby 0x0000b231 rb_eval + 11858 (eval.c:3263)
55 ruby 0x0000b4bc rb_eval + 12509 (eval.c:3311)
56 ruby 0x0000c8b5 rb_call0 + 2686 (eval.c:5966)
57 ruby 0x0000cbe4 rb_call + 146 (eval.c:6063)
58 ruby 0x0000a1b3 rb_eval + 7636 (eval.c:3447)
59 ruby 0x0001010d rb_yield_0 + 1102 (eval.c:4991)
60 ruby 0x00010afd proc_invoke + 1058 (eval.c:8581)
61 ruby 0x00010c03 call_end_proc + 161 (eval.c:7846)
62 ruby 0x0001257f rb_exec_end_proc + 434 (eval.c:7928)
63 ruby 0x00012626 ruby_finalize_0 + 119 (eval.c:1541)
64 ruby 0x000128f4 ruby_cleanup + 51 (eval.c:1570)
65 ruby 0x00012aa8 ruby_stop + 17 (eval.c:1619)
66 ruby 0x0001968d ruby_run + 80 (eval.c:1640)
67 ruby 0x00001a83 main + 45 (main.c:48)
68 ruby 0x00001a3a _start + 216
69 ruby 0x00001961 start + 41
Troubleshooting
First thing I decided to do was look and see if any of the patches described in "Patches to ANTLR 3.0" had been applied to the new version:
- Missing parentheses around predicates: fixed.
- Bug in C runtime column handling: not fixed; so I reapplied the fix, now it’s at about line 183 in the file
runtime/C/dist/libantlr3c-3.0.1/src/antlr3inputstream.c
:
--- runtime/C/dist/libantlr3c-3.0.1/src/antlr3inputstream.c.old 2007-08-10 21:23:05.000000000 +0200
+++ runtime/C/dist/libantlr3c-3.0.1/src/antlr3inputstream.c 2007-10-16 00:17:51.000000000 +0200
@@ -180,7 +180,7 @@
input->nextChar = input->data; /* Input at first character */
input->line = 1; /* starts at line 1 */
- input->charPositionInLine = -1;
+ input->charPositionInLine = 0;
input->currentLine = input->data;
input->markDepth = 0; /* Reset markers */
- Filter mode: not fixed, so reapplied:
--- src/org/antlr/codegen/CodeGenerator.java.old 2007-10-16 00:21:05.000000000 +0200
+++ src/org/antlr/codegen/CodeGenerator.java 2007-10-16 00:22:18.000000000 +0200
@@ -298,7 +298,8 @@
}
boolean filterMode = grammar.getOption("filter")!=null &&
- grammar.getOption("filter").equals("true");
+ grammar.getOption("filter").equals("true") &&
+ ( grammar.type==Grammar.LEXER );
boolean canBacktrack = grammar.getSyntacticPredicates()!=null ||
filterMode;
Rebuilding ANTLR
In order for these fixes to take effect I had to rebuild ANTLR itself. Unfortunately, the steps described in "Rebuilding ANTLR" no longer work for some unknown reason.
To simplify troubleshooting I first did:
unset CLASSPATH
And then:
ant build
The output was similar (100 errors) to my initial efforts at building ANTLR 3.0, described in "Rebuilding ANTLR". So I tried adding JUnit to the CLASSPATH
:
export CLASSPATH="/usr/local/junit/junit.jar"
Now ant build
yielded only 13 errors, as far as I can tell, all of the duplicate class warnings like this:
compile:
[myjavac] Compiling 126 source files to /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/build/classes
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRLexer.java:61: duplicate class: org.antlr.tool.ANTLRLexer
[myjavac] public class ANTLRLexer extends antlr.CharScanner implements ANTLRTokenTypes, TokenStream
[myjavac] ^
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRParser.java:72: duplicate class: org.antlr.tool.ANTLRParser
[myjavac] public class ANTLRParser extends antlr.LLkParser implements ANTLRTokenTypes
[myjavac] ^
Google reveals this post from someone with a similar problem trying to build ANTLR 3.0.1, unfortunately with no replies. It seems that this problem is definitely a new one introduced in 3.0.1.
It appears that the errors are identical regardless of whether antlr-2.7.7.jar
and stringtemplate-3.1b1.jar
are exported in the CLASSPATH
, and using relative or absolute paths makes no difference either.
My suspicion was that the breakage was introduced into build.xml
in changeset 3611, and hopefully fixed in changeset 3775. Unfortunately that version can’t be downloaded right now due to a bug or a misconfiguration in FishEye (if you’ll try you just see "Install bcel in the classpath to have automatic version in jar name Tests failed" in your browser window). You can’t download a full tarball snapshot either, as it’s once again broken; my first try yielded a useless 144KB archive that can’t be extracted.
The latest intermediate build released by Terence is from 18 July. On downloading this I was able to confirm that changeset 3775 doesn’t actually fix the problem, and the file that comes with ANTLR 3.0.1 is identical to that file.
So my next tactic was to go back to the last known-good build file, the one that came with ANTLR 3.0, and compare it to the 3.0 one. Unfortunately there are far too many changes to really grok what’s gone wrong. I tried temporarily moving the antlr-3.0.1.jar
and antlr-runtime-3.0.1.jar
files out the way (seeing as the build.xml
file appears to slurp in all .jar
files in the lib
subdirectory unconditionally, but the build errors persist.
I was able to find out a bit more by looking at the output of ant -v build
; note the 13 duplicate files from the codegen
subdirectory at the end of the list of files to be compiled:
[myjavac] Files to be compiled:
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/Tool.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/DFA.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/DFAOptimizer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/DFAState.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/DecisionProbe.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/Label.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/LookaheadSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFA.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFAConfiguration.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFAContext.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFAConversionThread.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFAState.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/NFAToDFAConverter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/RuleClosureTransition.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/SemanticContext.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/State.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/StateCluster.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/analysis/Transition.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/ACyclicDFACodeGenerator.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/ActionTranslatorLexer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CPPTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CSharpTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CodeGenTreeWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CodeGenTreeWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/CodeGenerator.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/JavaTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/ObjCTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/PythonTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/RubyTarget.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/codegen/Target.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/Barrier.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/BitSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/IntArrayList.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/IntSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/Interval.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/IntervalSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/MutableInteger.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/OrderedHashSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/misc/Utils.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/BaseTest.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/DebugTestAutoAST.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/DebugTestRewriteAST.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/ErrorQueue.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestASTConstruction.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestAttributes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestAutoAST.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestCharDFAConversion.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestCommonTreeNodeStream.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestDFAConversion.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestDFAMatching.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestInterpretedLexing.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestInterpretedParsing.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestIntervalSet.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestJavaCodeGeneration.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestLexer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestMessages.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestNFAConstruction.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestRewriteAST.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestRewriteTemplates.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestSemanticPredicateEvaluation.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestSemanticPredicates.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestSets.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestSymbolDefinitions.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestSyntacticPredicateEvaluation.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestTemplates.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestTokenRewriteStream.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestTreeNodeStream.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestTreeParsing.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestTreeWizard.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/test/TestUnBufferedTreeNodeStream.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRErrorListener.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRLexer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRParser.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRTreePrinter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ANTLRTreePrinterTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ActionAnalysisLexer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/AssignTokenTypesWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/AssignTokenTypesWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Attribute.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/AttributeScope.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/BuildDependencyGenerator.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/DOTGenerator.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/DefineGrammarItemsWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/DefineGrammarItemsWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ErrorManager.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/FASerializer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Grammar.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarAST.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarAnalysisAbortedMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarDanglingStateMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarInsufficientPredicatesMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarNonDeterminismMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarReport.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarSanity.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarSemanticsMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarSyntaxMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/GrammarUnreachableAltsMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Interp.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Interpreter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/LeftRecursionCyclesMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Message.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/NFAFactory.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/NameSpaceChecker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/NonRegularDecisionMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/RandomPhrase.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/RecursionOverflowMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/Rule.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/RuleLabelScope.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/ToolMessage.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/TreeToNFAConverter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/src/org/antlr/tool/TreeToNFAConverterTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRLexer.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRParser.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRTreePrinter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/ANTLRTreePrinterTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/AssignTokenTypesWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/AssignTokenTypesWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/CodeGenTreeWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/CodeGenTreeWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/DefineGrammarItemsWalker.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/DefineGrammarItemsWalkerTokenTypes.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/TreeToNFAConverter.java
[myjavac] /Users/wincent/trabajo/vendor/ANTLR/antlr-3.0.1/codegen/TreeToNFAConverterTokenTypes.java
So with my zero knowledge of how ant
works I decided to try a number of quick fixes:
mv
the entirecodegen
directory out the way: fails- Move the individual
.java
files out the way: fails
for FILE in `ls *.java`
do
mv $FILE $FILE.disabled
done
- Instead of moving those files out the way, move the other ones: works
mkdir /tmp/hide
cd codegen
FILES=`ls *.java`
cd ..
cd src/org/antlr/tool/
for FILE in $FILES
do
mv $FILE /tmp/hide/
done
cd ../codegen
mv CodeGenTreeWalker.java CodeGenTreeWalkerTokenTypes.java /tmp/hide/
I don’t really know anything about Java or like it, and this kind of struggle with XML build files is just one reason why.
Install the custom jar:
sudo cp build/antlr.jar /usr/local/antlr-3.0.1/lib/antlr-3.0.1-custom.jar
sudo mv /usr/local/antlr-3.0.1/lib/antlr-3.0.1.jar /usr/local/antlr-3.0.1/lib/antlr-3.0.1.jar.disabled
And update my CLASSPATH
export:
export CLASSPATH=".:/usr/local/antlr/lib/antlr-3.0.1-custom.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-2.7.7.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/antlr-runtime-3.0.1.jar"
export CLASSPATH="$CLASSPATH:/usr/local/antlr/lib/stringtemplate-3.1b1.jar"
Rebuilding the C runtime
And then rebuild the C runtime library again:
cd runtime/C/dist/libantlr3c-3.0.1/
make clean
./configure
make
make check
sudo make install
Next steps
Unfortunately with these changes 3.0.1 is still broken so I’ll have to investigate further. The cause of the problem and the workaround is documented here:
http://www.antlr.org:8080/pipermail/antlr-interest/2007-October/024205.html
Subsequent rebuild
I later went on to make a further patch:
--- antlr-3.0.1/src/org/antlr/codegen/templates/C/C.stg.old 2007-10-16 19:31:23.000000000 +0200
+++ antlr-3.0.1/src/org/antlr/codegen/templates/C/C.stg 2007-10-16 19:31:38.000000000 +0200
@@ -53,7 +53,6 @@
* This <type> file was generated by $ANTLR version <ANTLRVersion>
*
* - From the grammar source file : <fileName>
- * - On : <generatedTimestamp>
<if(LEXER)>
* - for the lexer : <name>Lexer
<endif>
And do another rebuild (this with the existing, modified source tree with the duplicate classes removed):
OLD_CLASSPATH=$CLASSPATH
unset CLASSPATH
export CLASSPATH="/usr/local/junit/junit.jar"
ant build
sudo cp build/antlr.jar /usr/local/antlr-3.0.1/lib/antlr-3.0.1-custom.jar
export CLASSPATH=$OLD_CLASSPATH
Fairly straightforward if you keep the modified tree lying around.