antlr / antlr4

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.
http://antlr.org
BSD 3-Clause "New" or "Revised" License
17.11k stars 3.28k forks source link

Can't run example from getting started: "Can't load Hello as lexer or parser" #1165

Closed ghost closed 8 years ago

ghost commented 8 years ago

https://github.com/antlr/antlr4/blob/master/doc/getting-started.md

Microsoft Windows [Version 10.0.10586]
(c) Корпорация Майкрософт (Microsoft Corporation), 2015. Все права защищены.
> type bin\antlr4.bat
java org.antlr.v4.Tool %*
> type bin\grun.bat
java org.antlr.v4.gui.TestRig %*
> java org.antlr.v4.Tool
ANTLR Parser Generator  Version 4.5.3
 -o ___              specify output directory where all output is generated
 -lib ___            specify location of grammars, tokens files
 -atn                generate rule augmented transition network diagrams
 -encoding ___       specify grammar file encoding; e.g., euc-jp
 -message-format ___ specify output style for messages in antlr, gnu, vs2005
 -long-messages      show exception details when available for errors and warnings
 -listener           generate parse tree listener (default)
 -no-listener        don't generate parse tree listener
 -visitor            generate parse tree visitor
 -no-visitor         don't generate parse tree visitor (default)
 -package ___        specify a package/namespace for the generated code
 -depend             generate file dependencies
 -D<option>=value    set/override a grammar-level option
 -Werror             treat warnings as errors
 -XdbgST             launch StringTemplate visualizer on generated code
 -XdbgSTWait         wait for STViz to close before continuing
 -Xforce-atn         use the ATN simulator for all predictions
 -Xlog               dump lots of logging info to antlr-timestamp.log
> java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
> javac -version
javac 1.8.0_77
> type Hello.g4
// Define a grammar called Hello
grammar Hello;
r  : 'hello' ID ;         // match keyword hello followed by an identifier
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
> echo %CLASSPATH%
C:\Users\ploskov\Documents\Javalib\antlr-4.5.3-complete.jar;C:\Users\ploskov\Documents\Javalib\antlr-runtime-4.5.3.jar
> antlr4 Hello.g4 && dir
> java org.antlr.v4.Tool Hello.g4
 Том в устройстве C не имеет метки.
 Серийный номер тома: 2257-E72E

 Содержимое папки C:\Users\ploskov\Documents\tmp

08.04.2016  21:10    <DIR>          .
08.04.2016  21:10    <DIR>          ..
08.04.2016  21:07               241 Hello.g4
08.04.2016  21:10                31 Hello.tokens
08.04.2016  21:10             1 353 HelloBaseListener.java
08.04.2016  21:10             3 236 HelloLexer.java
08.04.2016  21:10                31 HelloLexer.tokens
08.04.2016  21:10               554 HelloListener.java
08.04.2016  21:10             3 707 HelloParser.java
               7 файлов          9 153 байт
               2 папок  672 314 544 128 байт свободно
> javac Hello*.java
> dir
 Том в устройстве C не имеет метки.
 Серийный номер тома: 2257-E72E

 Содержимое папки C:\Users\ploskov\Documents\tmp

08.04.2016  21:12    <DIR>          .
08.04.2016  21:12    <DIR>          ..
08.04.2016  21:07               241 Hello.g4
08.04.2016  21:10                31 Hello.tokens
08.04.2016  21:12               794 HelloBaseListener.class
08.04.2016  21:10             1 353 HelloBaseListener.java
08.04.2016  21:12             3 356 HelloLexer.class
08.04.2016  21:10             3 236 HelloLexer.java
08.04.2016  21:10                31 HelloLexer.tokens
08.04.2016  21:12               304 HelloListener.class
08.04.2016  21:10               554 HelloListener.java
08.04.2016  21:12               869 HelloParser$RContext.class
08.04.2016  21:12             4 160 HelloParser.class
08.04.2016  21:10             3 707 HelloParser.java
              12 файлов         18 636 байт
               2 папок  672 314 523 648 байт свободно
> grun Hello r -tree
> java org.antlr.v4.gui.TestRig Hello r -tree
Can't load Hello as lexer or parser

What I did wrong? (without antlr-runtime-4.5.3.jar I have same behavior)

beardlybread commented 8 years ago

First guess would be that your current working directory (pwd) isn't included in the CLASSPATH variable. It's throwing a ClassNotFoundException here, so maybe try invoking java with -cp flag and explicitly define your path.

ghost commented 8 years ago

Right you are! Thank you!

ghost commented 8 years ago

I change .bat files and problem was solved:

@ECHO OFF
java org.antlr.v4.Tool %*
@ECHO OFF
SET TEST_CURRENT_DIR=%CLASSPATH:.;=%
if "%TEST_CURRENT_DIR%" == "%CLASSPATH%" ( SET CLASSPATH=.;%CLASSPATH% )
java org.antlr.v4.gui.TestRig %*

Is that a good solution?

beardlybread commented 8 years ago

If it's working, I don't see how it could be bad. :smile:

ghost commented 5 years ago

The proposed solution doesn't work. It just hangs in cmd.

sanjanasrivastava commented 3 years ago

I have the same problem as ghost - I try java -cp ".;C:\antlr\antlr-4.8-complete.jar grun Hello r -tree but it just hangs.

The proposed solution doesn't work. It just hangs in cmd.

Arjungowda1 commented 2 months ago

The issue is with the grun.bat adding .; at the start of classpath.

I just modified antlr4.bat to

@ECHO OFF
SET CLASSPATH=C:\antlr\antlr-4.13.2-complete.jar
java org.antlr.v4.Tool %*`

I only use CLASSPATH for antlr you should be careful as this rewrites the classpath