The purpose and intent of this project was to create and generate Typescript declaration files for the Antlr4 JavaScript target. Allowing for generated Antlr Parsers and Lexers that have full ES5 browser support. This tool also allows for pure JavaScript implementations, if needed.
npm install --save-dev antlr4-tool
npm install -S antlr4
#
# (TypeScript Only)
#
npm install -S @types/antlr4
"scripts": {
"generate-parser": "antlr4-tool -o parser path/to/Grammar.g4"
}
Run the NPM script command
npm run generate-parser
Use your generated Parser
JavaScript
const antlr4 = require('antlr4')
const InputStream = antlr4.InputStream;
const CommonTokenStream = antlr4.CommonTokenStream;
const GrammarParser = require('./parser/GrammarParser').GrammarParser;
const GrammarLexer = require('./parser/GrammarLexer').GrammarLexer;
const inputStream = new InputStream('int x = 10;');
const lexer = new GrammarLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new GrammarParser(tokenStream);
// Parse the input, where `compilationUnit` is whatever entry point you defined
const tree = parser.compilationUnit();
console.log(tree);
TypeScript
import {InputStream, CommonTokenStream} from 'antlr4';
import {GrammarParser} from './parser/GrammarParser';
import {GrammarLexer} from './parser/GrammarLexer';
const inputStream = new InputStream('enter you grammar here');
const lexer = new GrammarLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new GrammarParser(tokenStream);
// Parse the input, where `compilationUnit` is whatever entry point you defined
const tree = parser.compilationUnit();
console.log(tree);
Add to your tsconfig.json:
"typeRoots": ["types"],
npm install -g antlr4-tool
Usage: antlr4-tool [options] <grammars...>
Options:
-V, --version output the version number
-o --output-dir [output_dir] Output Directory (Default: Current Directory)
-l --language [language] Antlr Language Target: ts, typescript, js, javascript (Default: typescript)
--listener Generate parse tree listener (Default)
--no-listener Don't generate parse tree listener
--visitor Generate parse tree visitor (Default)
--no-visitor Don't generate parse tree visitor
-h, --help output usage information
antlr4-tool -V
antlr4-tool -l ts -o c-parser samples/c/C.g4
antlr4-tool -l js -o c-parser samples/c/C.g4
const tool = require('antlr4-tool');
const opts = {
language: 'TypeScript', // Only support for JavaScript & TypeScript
grammarFiles: ['samples/c/C.g4'],
outputDirectory: 'c-parser'
};
const compiledResults = tool.compile(opts);
console.log(compiledResults);