Skip to content

Repository files navigation

antlr4-vensim Vensim grammar in ANTLR 4

Using the parser

Install Node 14 or later. ANTLR 4 now requires Node 14+ for ES module support.

Install the package with npm in your project.

npm install antlr4-vensim

Import the lexer, parser, and/or visitor.

import { ModelLexer, ModelParser, ModelVisitor } from 'antlr4-vensim'

Refer to the ANTLR 4 JavaScript runtime documentation for further details about using the parser.

Installing tools

The grammar development tools in this package require macOS. They are not required to use the parser.

Vensim grammar development uses the ANTLR 4 parser generator.

Install Node 14 or later. ANTLR 4 now requires Node 14+ for ES module support.

Install the latest Java SE JDK. We are only using Java for development purposes, which is covered by the license for Java SE.

Install ANTLR 4 Java tools version 4.12.0.

cd /usr/local/lib
sudo curl -O https://www.antlr.org/download/antlr-4.12.0-complete.jar

Set up ANTLR 4 in .bash_profile.

export CLASSPATH=".:/usr/local/lib/antlr-4.12.0-complete.jar:$CLASSPATH"

Developing the parser

Build the parser after modifying the grammar.

pnpm i
pnpm build

The build process generates a Vensim parser in JavaScript in the parser directory.

ModelLexer.js
ModelParser.js
ModelVisitor.js

Running the tests

The tests run against the generated parser in the parser directory, so run pnpm build first if you have changed the grammar.

pnpm test

The tests in tests/expr-precedence.test.js pin down operator grouping in the expr rule. Precedence there comes from the order of the alternatives in grammar/Expr.g4, so reordering them changes how expressions evaluate without causing a parse error.

Command line utility

The a4 script generates and runs a lexer and parser in Java. It is useful in development when you are trying to understand how the lexer is tokenizing your model and what parse tree the parser is generating.

generate

./a4 generate

Generate the parser in Java (not JavaScript) in the java directory.

lex

./a4 lex <mdl-file-pathname>

Run the lexer on the .mdl file to print the token stream. The generate command must be run first.

tree

./a4 tree <mdl-file-pathname>

Run the parser on the .mdl file to print the parse tree. The generate command must be run first.

clean

./a4 clean

Clean out the generated parser files in the java directory.

tokens

./a4 tokens

Print the lexer token list.

About

Vensim grammar in ANTLR 4

Resources

Stars

1 star

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages