All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cessor.openapi-processor-core.2024.7.source-code.Mapping.g4 Maven / Gradle / Ivy

grammar Mapping;

/*
 * Parser Rules
 */


// root:
mapping
    : type | map | annotate | content
    ;

type
    : anyType
    ;

map
    : sourceType Arrow anyType
    ;

content
    : contentType Arrow anyType
    ;

annotate
    : sourceType Annotate annotationType
    ;

anyType
    : plainType | primitiveType | targetType
    ;

plainType
    : Plain
    ;

primitiveType
    : primitiveValue | primitiveValue OpenArray CloseArray
    ;

sourceType
    : sourceIdentifier (':' formatIdentifier)?
    ;

targetType
    : (annotationType)? qualifiedTargetType
    ;

annotationType
    : qualifiedType ('(' (annotationParameters)? ')')?
    ;

contentType
    : ContentType
    ;

annotationParameters
    : annotationParameterUnnamed | annotationParameterNamed (',' annotationParameterNamed)*
    ;

annotationParameterUnnamed
    : (Identifier | Boolean | String | Number | QualifiedTypeClass)
    ;

annotationParameterNamed
    : Identifier '=' (Identifier | Boolean | String | Number | QualifiedTypeClass)
    ;

qualifiedTargetType
    : qualifiedType
    ;

qualifiedType
    : QualifiedType ('<' genericParameters '>')?
    ;

genericParameters
    : (genericParameter | genericParameterAny) (',' genericParameter)*
    ;

genericParameter
    : QualifiedType ('<' genericParameters '>')?
    ;

genericParameterAny
    : GenericAny
    ;

sourceIdentifier
    :  Identifier | String
    ;

formatIdentifier
    : Identifier | Format | String | primitiveValue
    ;

primitiveValue
    : 'byte' | 'short' | 'int' | 'long' | 'float' | 'double' | 'boolean' | 'char'
    ;


/*
 * Lexer Rules
 */

Arrow: '=>';
Annotate: '@';

Plain: 'plain';
Boolean: 'true' | 'false';
Package: '{package-name}';

DoubleQuote: '"';
GenericAny: '?';
OpenArray: '[';
CloseArray: ']';

Whitespace
  : [ \t] -> skip
  ;

Identifier
    : JavaLetter JavaLetterOrDigit*
    ;

QualifiedTypeClass
    : (Identifier) ('.' Identifier)* '.class'
    ;

QualifiedType
    : (Identifier | Package) ('.' Identifier)*
    ;

Format
    : FormatLetter FormatLetterOrDigit*
    ;

String
    : DoubleQuote ( ~["\\] | '\\' [\t\\"] )* DoubleQuote
    ;

MimeType
    : [a-zA-Z_] ([a-zA-Z0-9\\._-])*
    ;

MimeSubType
    : [a-zA-Z_] ([a-zA-Z0-9\\._-])*
    ;

ContentType
    : MimeType '/' MimeSubType
    ;

// "any" number format (we only want to split the parameters list)
Number
    : ([a-fA-FlLxX0-9\\._])+
    ;

fragment JavaLetter
    : [a-zA-Z$_]
    ;

fragment JavaLetterOrDigit
    : [a-zA-Z0-9$_]
    ;

fragment FormatLetter
    :  [a-zA-Z_-]
    ;

fragment FormatLetterOrDigit
    : [a-zA-Z0-9_-]
    ;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy