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.03k stars 3.27k forks source link

Antlr tool does not work on Windows with full path file names #4463

Open kaby76 opened 10 months ago

kaby76 commented 10 months ago

Antlr tool does not generate files for a grammar if the path given is a full, rooted path. The following is a session in a "cmd.exe" shell. Notice there are no .java files in the directory before or after running the command "java -jar ..." for a path with a drive_letter.

C:\msys64\home\Kenne\issues\g4-3803\abb>dir
 Volume in drive C has no label.
 Volume Serial Number is 43F9-5C78

 Directory of C:\msys64\home\Kenne\issues\g4-3803\abb

11/06/2023  09:05 AM    <DIR>          .
11/06/2023  06:19 AM    <DIR>          ..
11/06/2023  08:48 AM    <DIR>          .antlr
10/31/2023  05:49 AM             2,210 abbLexer.g4
10/31/2023  05:49 AM             1,964 abbParser.g4
10/31/2023  05:49 AM               320 desc.xml
10/31/2023  05:49 AM    <DIR>          examples
10/31/2023  05:49 AM             1,605 pom.xml
10/31/2023  05:49 AM               254 readme.txt
               5 File(s)          6,353 bytes
               4 Dir(s)  290,575,781,888 bytes free

C:\msys64\home\Kenne\issues\g4-3803\abb>java -jar C:\Users\Kenne\.m2\antlr4-4.13.1-complete.jar -Xlog c:\msys64\home\Kenne\issues\g4-3810\abb\abbLexer.g4
wrote ./antlr-2023-11-06-09.05.34.log

C:\msys64\home\Kenne\issues\g4-3803\abb>dir
 Volume in drive C has no label.
 Volume Serial Number is 43F9-5C78

 Directory of C:\msys64\home\Kenne\issues\g4-3803\abb

11/06/2023  09:05 AM    <DIR>          .
11/06/2023  06:19 AM    <DIR>          ..
11/06/2023  08:48 AM    <DIR>          .antlr
10/31/2023  05:49 AM             2,210 abbLexer.g4
10/31/2023  05:49 AM             1,964 abbParser.g4
11/06/2023  09:05 AM             7,075 antlr-2023-11-06-09.05.34.log
10/31/2023  05:49 AM               320 desc.xml
10/31/2023  05:49 AM    <DIR>          examples
10/31/2023  05:49 AM             1,605 pom.xml
10/31/2023  05:49 AM               254 readme.txt
               6 File(s)         13,428 bytes
               4 Dir(s)  290,575,708,160 bytes free

C:\msys64\home\Kenne\issues\g4-3803\abb>type antlr-2023-11-06-09.05.34.log
2023-11-06 09:05:33:603 grammar LogManager.java:25 before: (LEXER_GRAMMAR abbLexer (OPTIONS (= caseInsensitive true)) (RULES (RULE MODULE (BLOCK (ALT 'module'))) (RULE ENDMODULE (BLOCK (ALT 'endmodule'))) (RULE PROC (BLOCK (ALT 'PROC'))) (RULE ENDPROC (BLOCK (ALT 'ENDPROC'))) (RULE LOCAL (BLOCK (ALT 'LOCAL'))) (RULE CONST (BLOCK (ALT 'CONST'))) (RULE PERS (BLOCK (ALT 'PERS'))) (RULE VAR (BLOCK (ALT 'VAR'))) (RULE TOOLDATA (BLOCK (ALT 'TOOLDATA'))) (RULE WOBJDATA (BLOCK (ALT 'WOBJDATA'))) (RULE SPEEDDATA (BLOCK (ALT 'SPEEDDATA'))) (RULE ZONEDATA (BLOCK (ALT 'ZONEDATA'))) (RULE CLOCK (BLOCK (ALT 'CLOCK'))) (RULE BOOL (BLOCK (ALT 'BOOL'))) (RULE ON_CALL (BLOCK (ALT '\\ON'))) (RULE OFF_CALL (BLOCK (ALT '\\OFF'))) (RULE SLASH (BLOCK (ALT '/'))) (RULE EQUALS (BLOCK (ALT ':='))) (RULE COMMA (BLOCK (ALT ','))) (RULE CURLY_OPEN (BLOCK (ALT '{'))) (RULE CURLY_CLOSE (BLOCK (ALT '}'))) (RULE COLON (BLOCK (ALT ':'))) (RULE SEMICOLON (BLOCK (ALT ';'))) (RULE BRACKET_OPEN (BLOCK (ALT '('))) (RULE BRACKET_CLOSE (BLOCK (ALT ')'))) (RULE SQUARE_OPEN (BLOCK (ALT '['))) (RULE SQUARE_CLOSE (BLOCK (ALT ']'))) (RULE DOT (BLOCK (ALT '.'))) (RULE DOUBLEDOT (BLOCK (ALT '..'))) (RULE REL_BIGGER (BLOCK (ALT '>'))) (RULE REL_BIGGER_OR_EQUAL (BLOCK (ALT '>='))) (RULE REL_SMALLER (BLOCK (ALT '<'))) (RULE REL_SMALLER_OR_EQUAL (BLOCK (ALT '<='))) (RULE REL_EQUAL (BLOCK (ALT '=='))) (RULE REL_NOTEQUAL (BLOCK (ALT '<>'))) (RULE PLUS (BLOCK (ALT '+'))) (RULE MINUS (BLOCK (ALT '-'))) (RULE MULTIPLY (BLOCK (ALT '*'))) (RULE PERCENT (BLOCK (ALT '%'))) (RULE HASH (BLOCK (ALT '#'))) (RULE WS (BLOCK (LEXER_ALT_ACTION (ALT (BLOCK (ALT ' ') (ALT '\t') (ALT '\u000C'))) skip))) (RULE NEWLINE (BLOCK (ALT (? (BLOCK (ALT '\r'))) '\n'))) (RULE LINE_COMMENT (BLOCK (LEXER_ALT_ACTION (ALT '!' (* (BLOCK (ALT (~ (SET '\n' '\r')))))) skip))) (RULE BOOLLITERAL (BLOCK (ALT 'FALSE') (ALT 'TRUE'))) (RULE CHARLITERAL (BLOCK (ALT '\'' (BLOCK (ALT EscapeSequence) (ALT (~ (SET '\'' '\\' '\r' '\n')))) '\''))) (RULE STRINGLITERAL (BLOCK (ALT '"' (* (BLOCK (ALT EscapeSequence) (ALT (~ (SET '\\' '"' '\r' '\n'))))) '"'))) (RULE EscapeSequence (RULEMODIFIERS fragment) (BLOCK (ALT '\\' (BLOCK (ALT 'b') (ALT 't') (ALT 'n') (ALT 'f') (ALT 'r') (ALT '"') (ALT '\'') (ALT '\\') (ALT (.. '0' '3') (.. '0' '7') (.. '0' '7')) (ALT (.. '0' '7') (.. '0' '7')) (ALT (.. '0' '7')))))) (RULE FLOATLITERAL (BLOCK (ALT (+ (BLOCK (ALT (.. '0' '9')))) '.' (* (BLOCK (ALT (.. '0' '9')))) (? (BLOCK (ALT Exponent)))) (ALT '.' (+ (BLOCK (ALT (.. '0' '9')))) (? (BLOCK (ALT Exponent)))) (ALT (+ (BLOCK (ALT (.. '0' '9')))) Exponent))) (RULE Exponent (RULEMODIFIERS fragment) (BLOCK (ALT 'E' (? (BLOCK (ALT '+') (ALT '-'))) (+ (BLOCK (ALT (.. '0' '9'))))))) (RULE INTLITERAL (BLOCK (ALT (+ (BLOCK (ALT (.. '0' '9'))))) (ALT HexPrefix (+ (BLOCK (ALT HexDigit))) HexSuffix) (ALT BinPrefix (+ (BLOCK (ALT BinDigit))) BinSuffix))) (RULE HexPrefix (RULEMODIFIERS fragment) (BLOCK (ALT '\'' 'H'))) (RULE HexDigit (RULEMODIFIERS fragment) (BLOCK (ALT (.. '0' '9')) (ALT (.. 'A' 'F')))) (RULE HexSuffix (RULEMODIFIERS fragment) (BLOCK (ALT '\''))) (RULE BinPrefix (RULEMODIFIERS fragment) (BLOCK (ALT '\'' 'B'))) (RULE BinDigit (RULEMODIFIERS fragment) (BLOCK (ALT '0') (ALT '1'))) (RULE BinSuffix (RULEMODIFIERS fragment) (BLOCK (ALT '\''))) (RULE IDENTIFIER (BLOCK (ALT IdentifierStart (* (BLOCK (ALT IdentifierPart)))))) (RULE IdentifierStart (RULEMODIFIERS fragment) (BLOCK (ALT (.. 'A' 'Z')) (ALT '_'))) (RULE IdentifierPart (RULEMODIFIERS fragment) (BLOCK (ALT IdentifierStart) (ALT (.. '0' '9'))))))
2023-11-06 09:05:33:625 grammar LogManager.java:25 after: (LEXER_GRAMMAR abbLexer (OPTIONS (= caseInsensitive true)) (RULES (RULE MODULE (BLOCK (ALT 'module'))) (RULE ENDMODULE (BLOCK (ALT 'endmodule'))) (RULE PROC (BLOCK (ALT 'PROC'))) (RULE ENDPROC (BLOCK (ALT 'ENDPROC'))) (RULE LOCAL (BLOCK (ALT 'LOCAL'))) (RULE CONST (BLOCK (ALT 'CONST'))) (RULE PERS (BLOCK (ALT 'PERS'))) (RULE VAR (BLOCK (ALT 'VAR'))) (RULE TOOLDATA (BLOCK (ALT 'TOOLDATA'))) (RULE WOBJDATA (BLOCK (ALT 'WOBJDATA'))) (RULE SPEEDDATA (BLOCK (ALT 'SPEEDDATA'))) (RULE ZONEDATA (BLOCK (ALT 'ZONEDATA'))) (RULE CLOCK (BLOCK (ALT 'CLOCK'))) (RULE BOOL (BLOCK (ALT 'BOOL'))) (RULE ON_CALL (BLOCK (ALT '\\ON'))) (RULE OFF_CALL (BLOCK (ALT '\\OFF'))) (RULE SLASH (BLOCK (ALT '/'))) (RULE EQUALS (BLOCK (ALT ':='))) (RULE COMMA (BLOCK (ALT ','))) (RULE CURLY_OPEN (BLOCK (ALT '{'))) (RULE CURLY_CLOSE (BLOCK (ALT '}'))) (RULE COLON (BLOCK (ALT ':'))) (RULE SEMICOLON (BLOCK (ALT ';'))) (RULE BRACKET_OPEN (BLOCK (ALT '('))) (RULE BRACKET_CLOSE (BLOCK (ALT ')'))) (RULE SQUARE_OPEN (BLOCK (ALT '['))) (RULE SQUARE_CLOSE (BLOCK (ALT ']'))) (RULE DOT (BLOCK (ALT '.'))) (RULE DOUBLEDOT (BLOCK (ALT '..'))) (RULE REL_BIGGER (BLOCK (ALT '>'))) (RULE REL_BIGGER_OR_EQUAL (BLOCK (ALT '>='))) (RULE REL_SMALLER (BLOCK (ALT '<'))) (RULE REL_SMALLER_OR_EQUAL (BLOCK (ALT '<='))) (RULE REL_EQUAL (BLOCK (ALT '=='))) (RULE REL_NOTEQUAL (BLOCK (ALT '<>'))) (RULE PLUS (BLOCK (ALT '+'))) (RULE MINUS (BLOCK (ALT '-'))) (RULE MULTIPLY (BLOCK (ALT '*'))) (RULE PERCENT (BLOCK (ALT '%'))) (RULE HASH (BLOCK (ALT '#'))) (RULE WS (BLOCK (LEXER_ALT_ACTION (ALT (SET ' ' '\t' '\u000C')) skip))) (RULE NEWLINE (BLOCK (ALT (? (BLOCK (ALT '\r'))) '\n'))) (RULE LINE_COMMENT (BLOCK (LEXER_ALT_ACTION (ALT '!' (* (BLOCK (ALT (~ (SET '\n' '\r')))))) skip))) (RULE BOOLLITERAL (BLOCK (ALT 'FALSE') (ALT 'TRUE'))) (RULE CHARLITERAL (BLOCK (ALT '\'' (BLOCK (ALT EscapeSequence) (ALT (~ (SET '\'' '\\' '\r' '\n')))) '\''))) (RULE STRINGLITERAL (BLOCK (ALT '"' (* (BLOCK (ALT EscapeSequence) (ALT (~ (SET '\\' '"' '\r' '\n'))))) '"'))) (RULE EscapeSequence (RULEMODIFIERS fragment) (BLOCK (ALT '\\' (BLOCK (ALT 'b') (ALT 't') (ALT 'n') (ALT 'f') (ALT 'r') (ALT '"') (ALT '\'') (ALT '\\') (ALT (.. '0' '3') (.. '0' '7') (.. '0' '7')) (ALT (.. '0' '7') (.. '0' '7')) (ALT (.. '0' '7')))))) (RULE FLOATLITERAL (BLOCK (ALT (+ (BLOCK (ALT (.. '0' '9')))) '.' (* (BLOCK (ALT (.. '0' '9')))) (? (BLOCK (ALT Exponent)))) (ALT '.' (+ (BLOCK (ALT (.. '0' '9')))) (? (BLOCK (ALT Exponent)))) (ALT (+ (BLOCK (ALT (.. '0' '9')))) Exponent))) (RULE Exponent (RULEMODIFIERS fragment) (BLOCK (ALT 'E' (? (BLOCK (ALT (SET '+' '-')))) (+ (BLOCK (ALT (.. '0' '9'))))))) (RULE INTLITERAL (BLOCK (ALT (+ (BLOCK (ALT (.. '0' '9'))))) (ALT HexPrefix (+ (BLOCK (ALT HexDigit))) HexSuffix) (ALT BinPrefix (+ (BLOCK (ALT BinDigit))) BinSuffix))) (RULE HexPrefix (RULEMODIFIERS fragment) (BLOCK (ALT '\'' 'H'))) (RULE HexDigit (RULEMODIFIERS fragment) (BLOCK (ALT (SET (.. '0' '9') (.. 'A' 'F'))))) (RULE HexSuffix (RULEMODIFIERS fragment) (BLOCK (ALT '\''))) (RULE BinPrefix (RULEMODIFIERS fragment) (BLOCK (ALT '\'' 'B'))) (RULE BinDigit (RULEMODIFIERS fragment) (BLOCK (ALT (SET '0' '1')))) (RULE BinSuffix (RULEMODIFIERS fragment) (BLOCK (ALT '\''))) (RULE IDENTIFIER (BLOCK (ALT IdentifierStart (* (BLOCK (ALT IdentifierPart)))))) (RULE IdentifierStart (RULEMODIFIERS fragment) (BLOCK (ALT (SET (.. 'A' 'Z') '_')))) (RULE IdentifierPart (RULEMODIFIERS fragment) (BLOCK (ALT IdentifierStart) (ALT (.. '0' '9'))))))

C:\msys64\home\Kenne\issues\g4-3803\abb>

The tool cannot work without the -o option on Windows with full-path file names.

C:\msys64\home\Kenne\issues\g4-3803\abb>java -jar C:\Users\Kenne\.m2\antlr4-4.13.1-complete.jar -Xlog c:\msys64\home\Kenne\issues\g4-3810\abb\abbLexer.g4 -o .
wrote ./antlr-2023-11-06-09.07.35.log

C:\msys64\home\Kenne\issues\g4-3803\abb>dir
 Volume in drive C has no label.
 Volume Serial Number is 43F9-5C78

 Directory of C:\msys64\home\Kenne\issues\g4-3803\abb

11/06/2023  09:07 AM    <DIR>          .
11/06/2023  06:19 AM    <DIR>          ..
11/06/2023  08:48 AM    <DIR>          .antlr
10/31/2023  05:49 AM             2,210 abbLexer.g4
11/06/2023  09:07 AM            15,646 abbLexer.interp
11/06/2023  09:07 AM            27,075 abbLexer.java
11/06/2023  09:07 AM             1,039 abbLexer.tokens
10/31/2023  05:49 AM             1,964 abbParser.g4
11/06/2023  09:05 AM             7,075 antlr-2023-11-06-09.05.34.log
11/06/2023  09:07 AM             7,075 antlr-2023-11-06-09.07.35.log
10/31/2023  05:49 AM               320 desc.xml
10/31/2023  05:49 AM    <DIR>          examples
10/31/2023  05:49 AM             1,605 pom.xml
10/31/2023  05:49 AM               254 readme.txt
              10 File(s)         64,263 bytes
               4 Dir(s)  290,574,671,872 bytes free

C:\msys64\home\Kenne\issues\g4-3803\abb>

If you thought that the -o option would work always, it turns out not to either. The tool also does not work with paths with a drive letter.

C:\msys64\home\Kenne\issues\g4-3803\abb>java -jar c:\Users\Kenne\.vscode\extensions\mike-lischke.vscode-antlr4-2.4.2\node_modules\antlr4ng-cli\antlr4-4.13.2-SNAPSHOT-complete.jar -Dlanguage=Java -message-format antlr -o c:\msys64\home\Kenne\issues\g4-3810\abb\.antlr -no-listener -no-visitor -Xexact-output-dir c:\msys64\home\Kenne\issues\g4-3810\abb\abbLexer.g4

C:\msys64\home\Kenne\issues\g4-3803\abb>dir
 Volume in drive C has no label.
 Volume Serial Number is 43F9-5C78

 Directory of C:\msys64\home\Kenne\issues\g4-3803\abb

11/06/2023  10:27 AM    <DIR>          .
11/06/2023  06:19 AM    <DIR>          ..
11/06/2023  08:48 AM    <DIR>          .antlr
10/31/2023  05:49 AM             2,210 abbLexer.g4
10/31/2023  05:49 AM             1,964 abbParser.g4
10/31/2023  05:49 AM               320 desc.xml
10/31/2023  05:49 AM    <DIR>          examples
10/31/2023  05:49 AM             1,605 pom.xml
10/31/2023  05:49 AM               254 readme.txt
               5 File(s)          6,353 bytes
               4 Dir(s)  290,583,396,352 bytes free

C:\msys64\home\Kenne\issues\g4-3803\abb>dir .antlr
 Volume in drive C has no label.
 Volume Serial Number is 43F9-5C78

 Directory of C:\msys64\home\Kenne\issues\g4-3803\abb\.antlr

11/06/2023  08:48 AM    <DIR>          .
11/06/2023  10:27 AM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  290,583,199,744 bytes free

The .log files show that the tool certainly has no problem opening and reading the .g4 file. It appears to be a problem with the output directory.

kaby76 commented 10 months ago

Notes