https://github.com/barrettotte/pogo2ts
Use Antlr grammars to generate TypeScript models from POGOs (Plain Old Groovy Objects).
https://github.com/barrettotte/pogo2ts
antlr4 antlr4-csharp code-generation groovy typescript
Last synced: about 1 month ago
JSON representation
Use Antlr grammars to generate TypeScript models from POGOs (Plain Old Groovy Objects).
- Host: GitHub
- URL: https://github.com/barrettotte/pogo2ts
- Owner: barrettotte
- License: bsd-3-clause
- Created: 2020-08-11T20:28:16.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-11-05T20:02:21.000Z (over 4 years ago)
- Last Synced: 2025-02-03T13:13:18.929Z (over 1 year ago)
- Topics: antlr4, antlr4-csharp, code-generation, groovy, typescript
- Language: ANTLR
- Homepage:
- Size: 61.5 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Pogo2Ts
Use Antlr grammars to generate TypeScript models from POGOs (Plain Old Groovy Objects).
With this side project I wanted to learn a little bit more about Antlr grammars and code generation.
This is kind of just a toy and would need a pretty good amount of work to be considered usable.
I just wanted have some fun with this and get a simple case working.
## General Idea
- Lex and parse POGOs using Antlr4
- Walk through each generated AST
- Generate TypeScript source for each POGO
## Groovy Grammars
There are official Antlr4 grammars located in https://github.com/apache/groovy/blob/master/src/antlr/ .
However, I found out the Parrot parser for Groovy uses a fork of Antlr4 (https://issues.apache.org/jira/browse/GROOVY-9232).
This means that the official Antlr4 grammars don't work out of the box with the official Antlr4 jar.
After a lot of screwing around with trying to build the fork from https://github.com/tunnelvisionlabs/antlr4 ,
I decided I would just modify the existing Antlr4 Java8 grammars at https://github.com/antlr/grammars-v4/tree/master/java/java8 since Groovy is just a superset of Java.
Since I'm really just trying to convert POGOs, I will be skipping over the following items:
- Closures
- Metaprogramming
- All the cool Groovy string literal stuff - (interpolation, GStrings, etc)
- Probably much more...
My EBNF/Antlr is not strong enough to tackle these yet. If coerced enough I'd probably dive back in.
## Setup (Windows)
- Download Antlr4 jar - https://www.antlr.org/download/antlr-4.8-complete.jar
- Add Antlr4 jar to CLASSPATH system variable
- System Properties > Environment Variables > CLASSPATH (create if it doesn't exist)
- Example: CLASSPATH = `C:\Antlr4\antlr-4.8-complete.jar`
- Create `C:\Antlr4\antlr4.bat` with the content `java org.antlr.v4.Tool %*` and add to PATH
- Generate lexer and parser using `generate.bat`
- Run program with `dotnet run `
## Usage
- Run example files - `dotnet run ../model/groovy ../model/ts com.github.barrettotte.model`
## References
- Antlr Mega Tutorial - https://tomassetti.me/antlr-mega-tutorial/
- The Definitive ANTLR4 Reference - https://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference
- Apache Groovy - https://github.com/apache/groovy
- Antlr4 Grammars - https://github.com/antlr/grammars-v4
- Groovy Grammar Resources
- Groovy Language Documentation - https://docs.groovy-lang.org/latest/html/documentation/
- Groovy Syntax - https://groovy-lang.org/syntax.html
- Groovy Style Guide - https://groovy-lang.org/style-guide.html