Skip to content

A NPM library that assists in various Antlr4 parse, language analysis, and language manipulation tasks

License

Notifications You must be signed in to change notification settings

mcchatman8009/antlr4-helper

Repository files navigation

Antlr4 Helper

Overview

The goal of this project is to provided classes and interfaces that assist with the interaction of Antlr parsers. Making things like language manipulation and analysis much easier.

Getting Started

npm install -S antlr4-helper

Antlr4 Helper Documentation

Documentation (Click Here)

JavaScript Examples

Parsing Text

const antlrHelper = require('antlr4-helper');
const TinycLexer = require('./parser/TinycLexer').TinycLexer;
const TinycParser = require('./parser/TinycParser').TinycParser;


const factory = antlrHelper.createFactoryBuilder()
    .lexer((input) => new TinycLexer(input))
    .parser(tokenStream => new TinycParser(tokenStream))
    .rootRule((parser) => parser.program())
    .build();

const parser = antlrHelper.createParser(factory);
parser.parse('variable = 100;');
parser.checkForErrors();

//
// Find only variables
//
parser.filter((rule) => rule.getName() === 'id')
    .forEach((rule) => {
        const ruleName = rule.getName();
        console.log(ruleName); // id
        console.log(rule.getText()); // variable
    });

Changing Parsed Text

const antlrHelper = require('antlr4-helper');
const TinycLexer = require('./parser/TinycLexer').TinycLexer;
const TinycParser = require('./parser/TinycParser').TinycParser;

const factory = antlrHelper.createFactoryBuilder()
    .lexer((input) => new TinycLexer(input))
    .parser(tokenStream => new TinycParser(tokenStream))
    .rootRule((parser) => parser.program())
    .build();

const parser = antlrHelper.createParser(factory);
parser.parse('a = 10;');
parser.checkForErrors(); // No parse errors

//
// Find the first rule
//
const rule = parser.findRuleByName('id');

rule.setText('var');
console.log("The changed text:");
console.log(parser.getText()); //var = 10;

console.log("The replaced variable:");
const varName = rule.getText();
console.log(varName); //var;