javac - error: package org.antlr.v4.runtime does not exist
Dear all,
I apologise in advance for asking what might be an ignorant question,
but it has been ages since I used Java for anything and so my Java
troubleshooting skills are currently rusty/nonexistent.
On a box running Debian Stretch (oldstable), I am trying to compile an
Antlr4 lexer & parser. The first step (generating the lexer & parser
.java files from .g4 files) works fine, but the second step (compiling
the the lexer & parser) does not. Here's the first step:
$ mkdir /tmp/antlr-test
$ cd $_
$ wget --page-requisites --recursive --level=inf --convert-links \
--no-parent \
https://www.cs.cornell.edu/courses/cs4120/2013fa/handouts/antlr.html
$ cd www.cs.cornell.edu/courses/cs4120/2013fa/handouts/xi
$ ls -1
hello.xi
XiLexer.g4
XiParser.g4
$ antlr4 XiLexer.g4 XiParser.g4 -no-listener ; echo $?
0
$ ls -1
hello.xi
XiLexer.g4
XiLexer.java
XiLexer.tokens
XiParser.g4
XiParser.java
XiParser.tokens
All fine so far, as you can see. Now the second step:
$ javac Xi*.java
XiLexer.java:2: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.Lexer;
^
[SNIP - for full output, see attached file.]
100 errors
Oh dear. What to do?
The [Antlr4
FAQ](https://github.com/antlr/antlr4/blob/master/doc/faq/installation.md_
says, "If you see these kinds of errors, it's because you don't have the
runtime or complete ANTLR library in your CLASSPATH."
I installed Antlr4 via `sudo apt install antlr4` and I installed javac
via `sudo apt install default-jdk` so I would hope that Antlr4 is
reachable by javac, but in case not, I tried manually populating the
CLASSPATH environment variable with the same contents found in the
antlr4 executable, before running javac again:
$ cat /usr/bin/antlr4
#!/bin/sh
CLASSPATH=/usr/share/java/stringtemplate4.jar:/usr/share/java/antlr4.jar:/usr/share/java/antlr4-runtime.jar:/usr/share/java/antlr3-runtime.jar/:/usr/share/java/treelayout.jar
exec java -cp $CLASSPATH org.antlr.v4.Tool "$@"
$ CLASSPATH='.'
$ CLASSPATH+=':/usr/share/java/stringtemplate4.jar'
$ CLASSPATH+=':/usr/share/java/antlr4.jar'
$ CLASSPATH+=':/usr/share/java/antlr4-runtime.jar'
$ CLASSPATH+=':/usr/share/java/antlr3-runtime.jar/'
$ CLASSPATH+=':/usr/share/java/treelayout.jar"; javac Xi*.java
XiLexer.java:2: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.Lexer;
^
[SNIP - for full output, see attached file.]
100 errors
No improvement :(
So my question is: how can I make the `javac Xi*.java` command succeed,
*without* having to fall back on a non-Debian-provided Antlr4
installation?
(Two examples of non-Debian-provided Antlr4 installation would be: a
.jar produced by me cloning and building
https://github.com/antlr/antlr4; or if I downloaded this .jar:
https://www.antlr.org/download/antlr-4.7.1-complete.jar ).
Thanks in advance for any help you can provide!
Sam
--
A: When it messes up the order in which people normally read text.
Q: When is top-posting a bad thing?
() ASCII ribbon campaign. Please avoid HTML emails & proprietary
/\ file formats. (Why? See e.g. https://v.gd/jrmGbS ). Thank you.
XiLexer.java:2: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.Lexer;
^
XiLexer.java:3: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.CharStream;
^
XiLexer.java:4: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.Token;
^
XiLexer.java:5: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.TokenStream;
^
XiLexer.java:6: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.*;
^
XiLexer.java:7: error: package org.antlr.v4.runtime.atn does not exist
import org.antlr.v4.runtime.atn.*;
^
XiLexer.java:8: error: package org.antlr.v4.runtime.dfa does not exist
import org.antlr.v4.runtime.dfa.DFA;
^
XiLexer.java:9: error: package org.antlr.v4.runtime.misc does not exist
import org.antlr.v4.runtime.misc.*;
^
XiLexer.java:12: error: cannot find symbol
public class XiLexer extends Lexer {
^
symbol: class Lexer
XiLexer.java:15: error: cannot find symbol
protected static final DFA[] _decisionToDFA;
^
symbol: class DFA
location: class XiLexer
XiLexer.java:16: error: cannot find symbol
protected static final PredictionContextCache _sharedContextCache =
^
symbol: class PredictionContextCache
location: class XiLexer
XiLexer.java:49: error: cannot find symbol
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
^
symbol: class Vocabulary
location: class XiLexer
XiLexer.java:78: error: cannot find symbol
public Vocabulary getVocabulary() {
^
symbol: class Vocabulary
location: class XiLexer
XiLexer.java:83: error: cannot find symbol
public XiLexer(CharStream input) {
^
symbol: class CharStream
location: class XiLexer
XiLexer.java:101: error: cannot find symbol
public ATN getATN() { return _ATN; }
^
symbol: class ATN
location: class XiLexer
XiLexer.java:166: error: cannot find symbol
public static final ATN _ATN =
^
symbol: class ATN
location: class XiLexer
XiParser.java:2: error: package org.antlr.v4.runtime.atn does not exist
import org.antlr.v4.runtime.atn.*;
^
XiParser.java:3: error: package org.antlr.v4.runtime.dfa does not exist
import org.antlr.v4.runtime.dfa.DFA;
^
XiParser.java:4: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.*;
^
XiParser.java:5: error: package org.antlr.v4.runtime.misc does not exist
import org.antlr.v4.runtime.misc.*;
^
XiParser.java:6: error: package org.antlr.v4.runtime.tree does not exist
import org.antlr.v4.runtime.tree.*;
^
XiParser.java:12: error: cannot find symbol
public class XiParser extends Parser {
^
symbol: class Parser
XiParser.java:15: error: cannot find symbol
protected static final DFA[] _decisionToDFA;
^
symbol: class DFA
location: class XiParser
XiParser.java:16: error: cannot find symbol
protected static final PredictionContextCache _sharedContextCache =
^
symbol: class PredictionContextCache
location: class XiParser
XiParser.java:43: error: cannot find symbol
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
^
symbol: class Vocabulary
location: class XiParser
XiParser.java:72: error: cannot find symbol
public Vocabulary getVocabulary() {
^
symbol: class Vocabulary
location: class XiParser
XiParser.java:86: error: cannot find symbol
public ATN getATN() { return _ATN; }
^
symbol: class ATN
location: class XiParser
XiParser.java:88: error: cannot find symbol
public XiParser(TokenStream input) {
^
symbol: class TokenStream
location: class XiParser
XiParser.java:92: error: cannot find symbol
public static class FileContext extends ParserRuleContext {
^
symbol: class ParserRuleContext
location: class XiParser
XiParser.java:231: error: cannot find symbol
public final FileContext file() throws RecognitionException {
^
symbol: class RecognitionException
location: class XiParser
XiParser.java:275: error: cannot find symbol
public static final ATN _ATN =
^
symbol: class ATN
location: class XiParser
XiParser.java:93: error: cannot find symbol
public List<TerminalNode> STRING() { return getTokens(XiParser.STRING); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:94: error: cannot find symbol
public TerminalNode STRING(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:97: error: cannot find symbol
public List<TerminalNode> BOOL() { return getTokens(XiParser.BOOL); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:98: error: cannot find symbol
public TerminalNode BOOL(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:101: error: cannot find symbol
public List<TerminalNode> INT() { return getTokens(XiParser.INT); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:102: error: cannot find symbol
public TerminalNode INT(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:105: error: cannot find symbol
public List<TerminalNode> RETURN() { return getTokens(XiParser.RETURN); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:106: error: cannot find symbol
public TerminalNode RETURN(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:109: error: cannot find symbol
public List<TerminalNode> WHILE() { return getTokens(XiParser.WHILE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:110: error: cannot find symbol
public TerminalNode WHILE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:113: error: cannot find symbol
public List<TerminalNode> IF() { return getTokens(XiParser.IF); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:114: error: cannot find symbol
public TerminalNode IF(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:117: error: cannot find symbol
public List<TerminalNode> ELSE() { return getTokens(XiParser.ELSE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:118: error: cannot find symbol
public TerminalNode ELSE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:121: error: cannot find symbol
public List<TerminalNode> LENGTH() { return getTokens(XiParser.LENGTH); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:122: error: cannot find symbol
public TerminalNode LENGTH(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:125: error: cannot find symbol
public List<TerminalNode> BREAK() { return getTokens(XiParser.BREAK); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:126: error: cannot find symbol
public TerminalNode BREAK(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:129: error: cannot find symbol
public List<TerminalNode> TRUE() { return getTokens(XiParser.TRUE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:130: error: cannot find symbol
public TerminalNode TRUE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:133: error: cannot find symbol
public List<TerminalNode> FALSE() { return getTokens(XiParser.FALSE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:134: error: cannot find symbol
public TerminalNode FALSE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:137: error: cannot find symbol
public List<TerminalNode> ID() { return getTokens(XiParser.ID); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:138: error: cannot find symbol
public TerminalNode ID(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:141: error: cannot find symbol
public List<TerminalNode> INTEGER() { return getTokens(XiParser.INTEGER); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:142: error: cannot find symbol
public TerminalNode INTEGER(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:145: error: cannot find symbol
public List<TerminalNode> LBRACKET() { return getTokens(XiParser.LBRACKET); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:146: error: cannot find symbol
public TerminalNode LBRACKET(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:149: error: cannot find symbol
public List<TerminalNode> RBRACKET() { return getTokens(XiParser.RBRACKET); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:150: error: cannot find symbol
public TerminalNode RBRACKET(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:153: error: cannot find symbol
public List<TerminalNode> COLON() { return getTokens(XiParser.COLON); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:154: error: cannot find symbol
public TerminalNode COLON(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:157: error: cannot find symbol
public List<TerminalNode> EQUAL() { return getTokens(XiParser.EQUAL); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:158: error: cannot find symbol
public TerminalNode EQUAL(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:161: error: cannot find symbol
public List<TerminalNode> LPAREN() { return getTokens(XiParser.LPAREN); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:162: error: cannot find symbol
public TerminalNode LPAREN(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:165: error: cannot find symbol
public List<TerminalNode> RPAREN() { return getTokens(XiParser.RPAREN); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:166: error: cannot find symbol
public TerminalNode RPAREN(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:169: error: cannot find symbol
public List<TerminalNode> COMMA() { return getTokens(XiParser.COMMA); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:170: error: cannot find symbol
public TerminalNode COMMA(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:173: error: cannot find symbol
public List<TerminalNode> SEMICOLON() { return getTokens(XiParser.SEMICOLON); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:174: error: cannot find symbol
public TerminalNode SEMICOLON(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:177: error: cannot find symbol
public List<TerminalNode> LBRACE() { return getTokens(XiParser.LBRACE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:178: error: cannot find symbol
public TerminalNode LBRACE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:181: error: cannot find symbol
public List<TerminalNode> RBRACE() { return getTokens(XiParser.RBRACE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:182: error: cannot find symbol
public TerminalNode RBRACE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:185: error: cannot find symbol
public List<TerminalNode> STAR() { return getTokens(XiParser.STAR); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:186: error: cannot find symbol
public TerminalNode STAR(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:189: error: cannot find symbol
public List<TerminalNode> SLASH() { return getTokens(XiParser.SLASH); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:190: error: cannot find symbol
public TerminalNode SLASH(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:193: error: cannot find symbol
public List<TerminalNode> PERCENT() { return getTokens(XiParser.PERCENT); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:194: error: cannot find symbol
public TerminalNode PERCENT(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:197: error: cannot find symbol
public List<TerminalNode> PLUS() { return getTokens(XiParser.PLUS); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:198: error: cannot find symbol
public TerminalNode PLUS(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:201: error: cannot find symbol
public List<TerminalNode> DASH() { return getTokens(XiParser.DASH); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:202: error: cannot find symbol
public TerminalNode DASH(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:205: error: cannot find symbol
public List<TerminalNode> LANGLE() { return getTokens(XiParser.LANGLE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:206: error: cannot find symbol
public TerminalNode LANGLE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:209: error: cannot find symbol
public List<TerminalNode> RANGLE() { return getTokens(XiParser.RANGLE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:210: error: cannot find symbol
public TerminalNode RANGLE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:213: error: cannot find symbol
public List<TerminalNode> BANG() { return getTokens(XiParser.BANG); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:214: error: cannot find symbol
public TerminalNode BANG(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:217: error: cannot find symbol
public List<TerminalNode> AMPERSAND() { return getTokens(XiParser.AMPERSAND); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:218: error: cannot find symbol
public TerminalNode AMPERSAND(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:221: error: cannot find symbol
public List<TerminalNode> PIPE() { return getTokens(XiParser.PIPE); }
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:222: error: cannot find symbol
public TerminalNode PIPE(int i) {
^
symbol: class TerminalNode
location: class FileContext
XiParser.java:225: error: cannot find symbol
public FileContext(ParserRuleContext parent, int invokingState) {
^
symbol: class ParserRuleContext
location: class FileContext
XiLexer.java:13: error: cannot find symbol
static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
^
symbol: variable RuntimeMetaData
location: class XiLexer
XiLexer.java:13: error: cannot find symbol
static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
^
symbol: variable RuntimeMetaData
location: class XiLexer
100 errors
Reply to: