I have looked into the grammar and everything seems to be fine there and the parse-tree also generates without any errors but the mentioned codes give errors. This same error also appears when working with different COBOL code which has number operations or had a variable has hardcoded number input. I am using COBOL.g4 as my grammar and
import antlr4 from 'antlr4';
import fs from 'fs'
import HelloLexer from "./gen/CobolLexer.js";
import HelloParser from "./gen/CobolParser.js";
import CustomCobolListener from "./CustomCobolListener.js"
const {CommonTokenStream, InputStream} = antlr4;
createServer((req, res) => {
res.writeHead(200, {"Content-Type": "text/json"});
// res.write('<html><head><meta charset="UTF-8"/></head></head>');
var InputFromFile = '';
try {
let data = fs.readFileSync('./example.cbl', 'utf8');
InputFromFile = data;
} catch (e) {
console.log(e);
}
console.log("server running");
try {
var chars = new InputStream(InputFromFile, true);
var lexer = new HelloLexer(chars);
var tokens = new CommonTokenStream(lexer);
var parser = new HelloParser(tokens);
parser.buildParseTrees = true;
console.log("Walker Startes now");
var tree = parser.startRule();
var htmlChat = new CustomCobolListener(res);
antlr4.tree.ParseTreeWalker.DEFAULT.walk(htmlChat, tree);
}catch (e) {
// console.log(e)
}
// res.write("</body></html>");
res.end();
}).listen(1337);
is my js code in which
var tree = parser.startRule();
gives the following error
line 24:56 mismatched input '12345' expecting {ABORT, AS, ASCII, ASSOCIATED_DATA,
ASSOCIATED_DATA_LENGTH, ATTRIBUTE, AUTO, AUTO_SKIP, BACKGROUND_COLOR, BACKGROUND_COLOUR,
BEEP, BELL, BINARY, BIT, BLINK, BLOB, BOUNDS, CAPABLE, CCSVERSION, CHANGED, CHANNEL,
CLOB, CLOSE_DISPOSITION, COBOL, COMMITMENT, CONTROL_POINT, CONVENTION, CRUNCH, CURSOR,
DBCLOB, DEFAULT, DEFAULT_DISPLAY, DEFINITION, DFHRESP, DFHVALUE, DISK, DONTCARE, DOUBLE,
EBCDIC, EMPTY_CHECK, ENTER, ENTRY_PROCEDURE, ERASE, EOL, EOS, ESCAPE, EVENT, EXCLUSIVE,
EXPORT, EXTENDED, FOREGROUND_COLOR, FOREGROUND_COLOUR, FULL, FUNCTIONNAME,
FUNCTION_POINTER, GRID, HIGHLIGHT, IMPLICIT, IMPORT, INTEGER, KANJI, KEPT, KEYBOARD,
LANGUAGE, LB, LD, LEFTLINE, LENGTH_CHECK, LIBACCESS, LIBPARAMETER, LIBRARY, LIST, LOCAL,
LOCK, LONG_DATE, LONG_TIME, LOWER, LOWLIGHT, MMDDYYYY, NAMED, NATIONAL, NATIONAL_EDITED,
NETWORK, NO_ECHO, NUMERIC_DATE, NUMERIC_TIME, OCCURS, ODT, ORDERLY, OVERLINE, OWN,
PASSWORD, PORT, PRINTER, PRIVATE, PROCESS, PROGRAM, PROMPT, READER, REMOTE, REAL,
RECEIVED, RECURSIVE, REF, REMOVE, REQUIRED, REVERSE_VIDEO, SAVE, SECURE, SHARED,
SHAREDBYALL, SHAREDBYRUNUNIT, SHARING, SHORT_DATE, SQL, SYMBOL, TASK, THREAD,
THREAD_LOCAL, TIMER, TODAYS_DATE, TODAYS_NAME, TRUNCATED, TYPEDEF, UNDERLINE, VIRTUAL,
WAIT, YEAR, YYYYMMDD, YYYYDDD, ZERO_FILL, '66', '77', '88', INTEGERLITERAL,
NUMERICLITERAL, IDENTIFIER}
line 25:18 missing {ABORT, AS, ASCII, ASSOCIATED_DATA, ASSOCIATED_DATA_LENGTH, ATTRIBUTE,
AUTO, AUTO_SKIP, BACKGROUND_COLOR, BACKGROUND_COLOUR, BEEP, BELL, BINARY, BIT, BLINK,
BLOB, BOUNDS, CAPABLE, CCSVERSION, CHANGED, CHANNEL, CLOB, CLOSE_DISPOSITION, COBOL,
COMMITMENT, CONTROL_POINT, CONVENTION, CRUNCH, CURSOR, DBCLOB, DEFAULT, DEFAULT_DISPLAY,
DEFINITION, DFHRESP, DFHVALUE, DISK, DONTCARE, DOUBLE, EBCDIC, EMPTY_CHECK, ENTER,
ENTRY_PROCEDURE, ERASE, EOL, EOS, ESCAPE, EVENT, EXCLUSIVE, EXPORT, EXTENDED,
FOREGROUND_COLOR, FOREGROUND_COLOUR, FULL, FUNCTIONNAME, FUNCTION_POINTER, GRID,
HIGHLIGHT, IMPLICIT, IMPORT, INTEGER, KANJI, KEPT, KEYBOARD, LANGUAGE, LB, LD, LEFTLINE,
LENGTH_CHECK, LIBACCESS, LIBPARAMETER, LIBRARY, LIST, LOCAL, LOCK, LONG_DATE, LONG_TIME,
LOWER, LOWLIGHT, MMDDYYYY, NAMED, NATIONAL, NATIONAL_EDITED, NETWORK, NO_ECHO,
NUMERIC_DATE, NUMERIC_TIME, OCCURS, ODT, ORDERLY, OVERLINE, OWN, PASSWORD, PORT, PRINTER,
PRIVATE, PROCESS, PROGRAM, PROMPT, READER, REMOTE, REAL, RECEIVED, RECURSIVE, REF,
REMOVE, REQUIRED, REVERSE_VIDEO, SAVE, SECURE, SHARED, SHAREDBYALL, SHAREDBYRUNUNIT,
SHARING, SHORT_DATE, SQL, SYMBOL, TASK, THREAD, THREAD_LOCAL, TIMER, TODAYS_DATE,
TODAYS_NAME, TRUNCATED, TYPEDEF, UNDERLINE, VIRTUAL, WAIT, YEAR, YYYYMMDD, YYYYDDD,
ZERO_FILL, '66', '77', '88', INTEGERLITERAL, NUMERICLITERAL, IDENTIFIER} at '5'
for code
IDENTIFICATION DIVISION.
PROGRAM-ID. VERBS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(9) VALUE 10.
01 NUM2 PIC 9(9) VALUE 10.
01 NUMA PIC 9(9) VALUE 100.
01 NUMB PIC 9(9) VALUE 15.
01 NUMC PIC 9(9).
01 RES-DIV PIC 9(9).
01 RES-MULT PIC 9(9).
01 RES-SUB PIC 9(9).
01 RES-ADD PIC 9(9).
01 RES-LOL PIC 9(9).
01 RES-MOV PIC X(9).
PROCEDURE DIVISION.
COMPUTE NUMC = (NUM1 * NUM2).
DIVIDE NUMA BY NUMB GIVING RES-DIV.
MULTIPLY NUMA BY NUMB GIVING RES-MULT.
SUBTRACT NUMA FROM NUMB GIVING RES-SUB.
ADD NUMA TO NUMB GIVING RES-ADD.
MOVE NUMA TO RES-MOV.
INITIALIZE NUM1.
INITIALIZE NUM2 REPLACING NUMERIC DATA BY 12345.
ADD 5 TO NUM2 GIVING RES-LOL.
DISPLAY "NUMC:"NUMC
DISPLAY "RES-LOL:"RES-LOL
DISPLAY "RES-DIV:"RES-DIV
DISPLAY "RES-MULT:"RES-MULT
DISPLAY "RES-SUB:"RES-SUB
DISPLAY "RES-ADD:"RES-ADD
DISPLAY "RES-MOV:"RES-MOV
DISPLAY "REINITIALIZED NUM1: "NUM1
DISPLAY "REINITIALIZED NUM2: "NUM2
STOP RUN.
The error "line 24:56 mismatched input '12345' expecting {ABORT, AS, ASCII ..." does not mean 12345
isn't recognized, but the token(s) after it are unexpected. The 12345
is properly tokenised as a INTEGERLITERAL
token:
I tried running the generated parser with your example input, but that did not throw any error at all. So it must be an issue with the JS runtime (or you changed the .g4 grammar, which caused the error).
This is the parse tree I got:
Tested with Java and ANTLR 4.9.2