[%2522%26replace%3D%25241%26label%3DKotlin%26color%3Dgreen%26link%3Dhttps%253A%252F%252Fkotlinlang.org%252F)
AGL: A Grammar Language (or maybe Akehurst Grammar Language!)
Generic Language (DSL) support for kotlin multiplatform (parser, syntax-analyser, formatter, processor, etc)
There are many parser technologies, frameworks, generators, libraries
that already exist. When I first started this one in about 2007 there was none that
met all the requirements that I have. It has taken me several years (too many) to finally
reach the stage where I am happy to publish it. (mostly because it was a home project and not
worked on very frequently until the last couple of years, 2017/2018).
My Requirements:
- Simple grammar for defining a language with no restrictions
-- i.e. should support left & right recursive rules,
- Useable in Java and Javascript (other platforms/languages a bonus but not essential)
- No need to worry about keyword/identifier clashes
- Interpreted at runtime, i.e. no generate parser step.
- Supports families of languages, i.e. grammar composition/extension
Other
Articles
Example
Create a processor from a grammar
Parse a sentence to see if it is valid
val sentence = """
primitive String
collection List<E>
datatype A {
prop : String
prop2 : List<String>
}
""".trimIndent()
val result1 = processor.parse(sentence)
check(result1.issues.errors.isEmpty()) { result1.issues.toString() }
Process the sentence to get an Abstract Syntax Model (tree) of the sentence
val result2 = processor.process(sentence)
check(result2.allIssues.errors.isEmpty()) { result2.allIssues.toString() }
println(result2.asm?.asString())
Build
There are currently a number of failing tests, these indicate desired improvements.
To build locally the latest version, use assemble or publishToMavenLocal.
> cd net.akehurst.language
> ./gradlew clean assemble