antlr/doc/faq/installation.md

1.9 KiB

Installation

Please read carefully: Getting Started with ANTLR v4.

Why can't ANTLR (grun) find my lexer or parser?

If you see "Can't load Hello as lexer or parser", it's because you don't have '.' (current directory) in your CLASSPATH.

$ alias antlr4='java -jar /usr/local/lib/antlr-4.2.2-complete.jar'
$ alias grun='java org.antlr.v4.runtime.misc.TestRig'
$ export CLASSPATH="/usr/local/lib/antlr-4.2.2-complete.jar"
$ antlr4 Hello.g4
$ javac Hello*.java
$ grun Hello r -tree
Can't load Hello as lexer or parser
$

For mac/linux, use:

export CLASSPATH=".:/usr/local/lib/antlr-4.2.2-complete.jar:$CLASSPATH"

or for Windows:

SET CLASSPATH=.;C:\Javalib\antlr4-complete.jar;%CLASSPATH%

See the dot at the beginning? It's critical.

Why can't I run the ANTLR tool?

If you get a no class definition found error, you are missing the ANTLR jar in your CLASSPATH (or you might only have the runtime jar):

/tmp $ java org.antlr.v4.Tool Hello.g4
Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/v4/Tool
Caused by: java.lang.ClassNotFoundException: org.antlr.v4.Tool
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

Why doesn't my parser compile?

If you see these kinds of errors, it's because you don't have the runtime or complete ANTLR library in your CLASSPATH.

/tmp $ javac Hello*.java
HelloBaseListener.java:3: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.ParserRuleContext;
                           ^
...