| examples | ||
| lib/plankton | ||
| source | ||
| tools | ||
| .gitignore | ||
| readme.md | ||
Description
type2 is a slow, but versatile parser for context free languages (type 2 in the Chomsky hierarchy).
Being fed with a JSON file, specifying the language and a string via stdin, it decomposes the input, analyzes it and spits out its corresponding abstract syntax tree on stdout.
A typical call looks like this: type2 language.tp2.json < input.txt
Language specification
A language is specified by a JSON file containing a value of the following type:
record<
lexer_rules:list<
record<
type:string,
parameters:map<string,any>
>
>,
parser_rules:list<
record<
label:string,
premise:string,
conclusion:list<
record<
type:string,
parameters:map<string,any>
>
>
>
>,
parser_start:string
>
The recommended extension for such files is .tp2.json.
Lexer rule types
| type | meaning | parameters |
|---|---|---|
ignore |
disregard matching strings | pattern |
void |
do not assign a value to matching strings | pattern,id |
boolean |
interpret matching strings as boolean values | pattern,id,value |
int |
interpret matching strings as integer number values | pattern,id |
float |
interpret matching strings as floating point number values | pattern,id |
string |
interpret matching strings as string values | pattern,id |
Conclusion element types
| type | meaning | parameters |
|---|---|---|
terminal |
id |
|
variable |
id |