Initial ANTLR grammar

This commit is contained in:
Johan Maasing 2025-03-24 21:44:21 +01:00
commit cfce3e4dbb
Signed by: johan
GPG key ID: FFD31BABEE2DEED2
7 changed files with 171 additions and 0 deletions

55
parser/pom.xml Normal file
View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>nu.zoom.dsl</groupId>
<artifactId>endgen</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>nu.zoom.dsl</groupId>
<artifactId>parser</artifactId>
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- This plugin sets up maven to use Java 7 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>24</source>
<target>24</target>
</configuration>
</plugin>
<!-- Plugin to compile the g4 files ahead of the java files
See https://github.com/antlr/antlr4/blob/master/antlr4-maven-plugin/src/site/apt/examples/simple.apt.vm
Except that the grammar does not need to contain the package declaration as stated in the documentation (I do not know why)
To use this plugin, type:
mvn antlr4:antlr4
In any case, Maven will invoke this plugin before the Java source is compiled
-->
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.13.1</version>
<executions>
<execution>
<goals>
<goal>antlr4</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,23 @@
grammar Endpoints;
generatorconfig : '{' (configitem)? (',' configitem)* '}';
configitem : configkey ':' configvalue ;
configkey : IDENTIFIER ;
configvalue : (IDENTIFIER|VALUE) ;
fieldName : IDENTIFIER ;
fieldType : IDENTIFIER ;
compoundTypeName : IDENTIFIER ;
compoundField : fieldName ':' fieldType ;
compoundFields : '(' compoundField (',' compoundField)* ')' ;
compoundType : compoundTypeName compoundFields ;
pathSegment : '/' (IDENTIFIER|VALUE) ;
path : (pathSegment)+ ;
endpoint : path '<' (compoundFields | IDENTIFIER) ;
fragment DIGIT : [0-9] ;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z] ;
WS : [ \t\n\r]+ -> skip;
IDENTIFIER : (LOWERCASE | UPPERCASE) (LOWERCASE | UPPERCASE | DIGIT)* ;
VALUE : ~[ ,{}:()\n\t\r/<>"']+ ;

View file

@ -0,0 +1,7 @@
package nu.zoom.dsl;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

View file

@ -0,0 +1,4 @@
package nu.zoom.dsl.parser;
public class ParserFactory {
}