Currently supported parsers: LR0, SLR, LR1 and LALR parsers.
A basic usage of the library is as easy as follows:
LR1Parser obj=new LR1Parser();//Create an instance of the desired parser-In this case LR1 type parser
obj.read_grammar("Path_to_grammar");//Read the grammar file
obj.buildDFA();//Build a dfa from the file
System.out.println(obj.states);//Prints the transitions in all states
obj.print_transitions();//Print all the transitions
obj.getParsingTable(true);//Use false to avoid printing the table after creation
obj.parse("a c e",true);//Parse the string; use false to prevent the stack actions from displaying on screen
An example grammar files is included in the files directory.
- The map of the states
- The parse table
- The actions taken by stack to parse the table
Parser.java is the base class which all the other classes inherit from. It exposes the following methods:
Function | Return Type | Action |
---|---|---|
read_grammar | void | Reads the grammar, augments it and fills in the list of terminals and non-terminals |
join | String | Utility method to join convert ArrayList to String |
getClosure | void | Accepts a HashSet of type <Parser.Pair> and computes it's closure |
getGoto | HashSet<Parser.Pair>Computes Goto | |
augment, unaugment | void,void | Augments and unaugments the grammar |
parse | void | Parses the string using the generated table |
getIndex | int | Returns the index of the state, or -1 if a new state |
pretty_it | void | Formatting |
print_transitions | void | Prints all transitions |
You can either clone the repository here for a minimal usage, or download it from maven, with full documentation and junit tests.
If you choose option 1, you can use mvn clean install on the files in src and pom.xml directly (don't use the files directory) to build the jar, javadoc and run tests.
The files in the files directory gives you all the source files, if you want to run them individually, with more verbose debugging options.
For option 2 and release build:
<dependency>
<groupId>io.github.PalAditya</groupId>
<artifactId>parser-library</artifactId>
<version>0.1.1</version>
</dependency>
For snapshot build:
<dependency>
<groupId>io.github.PalAditya</groupId>
<artifactId>parser-library</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
In case you want the pre-release (latest) versions, you can download it manually from here
More documentation coming soon!