Split grammar
This commit is contained in:
parent
35ef968ed1
commit
10a4e115d9
4 changed files with 48 additions and 28 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -33,3 +33,5 @@ build/
|
||||||
|
|
||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
/endpoints-output/**
|
|
@ -57,6 +57,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<version>3.4.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<archive>
|
<archive>
|
||||||
<manifest>
|
<manifest>
|
||||||
|
|
40
parser/src/main/antlr4/imports/Common.g4
Normal file
40
parser/src/main/antlr4/imports/Common.g4
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright 2025 "Johan Maasing" <johan@zoom.nu>
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
grammar Common;
|
||||||
|
generatorconfig : '{' (configitem)? (',' configitem)* '}';
|
||||||
|
configitem : configkey ':' configvalue ;
|
||||||
|
configkey : IDENTIFIER ;
|
||||||
|
configvalue : (IDENTIFIER|VALUE) ;
|
||||||
|
namedTypeDeclaration : typeName typeDeclaration ;
|
||||||
|
typeName : IDENTIFIER ;
|
||||||
|
typeDeclaration : '(' typeField (',' typeField)* ')' ;
|
||||||
|
typeField : fieldName ':' fieldType ;
|
||||||
|
fieldName : IDENTIFIER ;
|
||||||
|
fieldType : IDENTIFIER ;
|
||||||
|
|
||||||
|
fragment LOWERCASE : [a-z] ;
|
||||||
|
fragment UPPERCASE : [A-Z] ;
|
||||||
|
fragment GENERICS : '['|']'|'<'|'>' ;
|
||||||
|
fragment DOT : '.' ;
|
||||||
|
fragment COMMENT_BEGIN : '/*' ;
|
||||||
|
fragment COMMENT_END : '*/' ;
|
||||||
|
fragment DIGIT : [0-9] ;
|
||||||
|
|
||||||
|
WS : [ \t\n\r]+ -> skip;
|
||||||
|
COMMENT : COMMENT_BEGIN .*? COMMENT_END -> skip;
|
||||||
|
IDENTIFIER : (LOWERCASE | UPPERCASE) (LOWERCASE | UPPERCASE | DIGIT | GENERICS | DOT)* ;
|
||||||
|
VALUE : ~[ ,{}:()/="#';*\n\r\t]+ ;
|
||||||
|
LEFT_ARROW : '<-' ;
|
||||||
|
RIGHT_ARROW : '->' ;
|
||||||
|
SLASH : '/' ;
|
|
@ -12,35 +12,12 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
grammar Endpoints;
|
grammar Endpoints;
|
||||||
|
import Common;
|
||||||
|
|
||||||
document : generatorconfig? (namedTypeDeclaration|endpoint)* ;
|
document : generatorconfig? (namedTypeDeclaration|endpoint)* ;
|
||||||
generatorconfig : '{' (configitem)? (',' configitem)* '}';
|
requestBody : LEFT_ARROW (namedTypeDeclaration | typeDeclaration | IDENTIFIER) ;
|
||||||
configitem : configkey ':' configvalue ;
|
responseBody : RIGHT_ARROW (namedTypeDeclaration | typeDeclaration | IDENTIFIER) ;
|
||||||
configkey : IDENTIFIER ;
|
|
||||||
configvalue : (IDENTIFIER|VALUE) ;
|
|
||||||
namedTypeDeclaration : typeName typeDeclaration ;
|
|
||||||
typeName : IDENTIFIER ;
|
|
||||||
typeDeclaration : '(' typeField (',' typeField)* ')' ;
|
|
||||||
typeField : fieldName ':' fieldType ;
|
|
||||||
fieldName : IDENTIFIER ;
|
|
||||||
fieldType : IDENTIFIER ;
|
|
||||||
requestBody : REQUEST_PREFIX (namedTypeDeclaration | typeDeclaration | IDENTIFIER) ;
|
|
||||||
responseBody : RESPONSE_PREFIX (namedTypeDeclaration | typeDeclaration | IDENTIFIER) ;
|
|
||||||
endpoint : path requestBody responseBody?;
|
endpoint : path requestBody responseBody?;
|
||||||
path : (pathSegment)+ ;
|
path : (pathSegment)+ ;
|
||||||
pathSegment : SLASH (IDENTIFIER|VALUE) ;
|
pathSegment : SLASH (IDENTIFIER|VALUE) ;
|
||||||
|
|
||||||
|
|
||||||
fragment DIGIT : [0-9] ;
|
|
||||||
fragment LOWERCASE : [a-z] ;
|
|
||||||
fragment UPPERCASE : [A-Z] ;
|
|
||||||
fragment GENERICS : '['|']'|'<'|'>' ;
|
|
||||||
fragment DOT : '.' ;
|
|
||||||
fragment COMMENT_BEGIN : '/*' ;
|
|
||||||
fragment COMMENT_END : '*/' ;
|
|
||||||
WS : [ \t\n\r]+ -> skip;
|
|
||||||
COMMENT : COMMENT_BEGIN .*? COMMENT_END -> skip;
|
|
||||||
REQUEST_PREFIX : '<-' ;
|
|
||||||
RESPONSE_PREFIX : '->' ;
|
|
||||||
SLASH : '/' ;
|
|
||||||
IDENTIFIER : (LOWERCASE | UPPERCASE) (LOWERCASE | UPPERCASE | DIGIT | GENERICS | DOT)* ;
|
|
||||||
VALUE : ~[ ,{}:()/="#';*\n\r\t]+ ;
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue