Sparqlify icon indicating copy to clipboard operation
Sparqlify copied to clipboard

Grammar railroad diagram

Open mingodad opened this issue 4 years ago • 0 comments

Using this tool https://www.bottlecaps.de/convert/ we can see a railroad diagram for the grammar in sparqlify-core/src/main/javacc/SparqlifyConfig.jj copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui in the tab Edit Grammar then switching to the tab View Diagram.

/*
From https://raw.githubusercontent.com/SmartDataAnalytics/Sparqlify/master/sparqlify-core/src/main/javacc/SparqlifyConfig.jj
*/

/* converted on Mon Jul 19, 2021, 10:57 (UTC+02) by javacc-to-w3c v0.53 which is Copyright (c) 2011-2021 by Gunther Rademacher <[email protected]> */

SparqlifyConfig
         ::= Stmt+
Stmt     ::= PrefixStmt
           | MacroStmt
           | ViewDefStmt
ViewDefStmt
         ::= 'create' 'view' NAME 'as' 'construct' ConstructTemplate VarBindingPart? 'from' RelationRef ';'?
VarBindingPart
         ::= 'with' VarBinding+
VarBinding
         ::= Var '=' Expression
RelationRef
         ::= NAME
           | SQL_STATEMENT
PrefixStmt
         ::= PrefixDecl
           | BaseDecl
MacroStmt
         ::= 'define' Expression
QueryUnit
         ::= Query EOF
Query    ::= Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) BindingsClause
UpdateUnit
         ::= Prologue ( Update1 ';' Prologue )* Update1? EOF
Prologue ::= ( BaseDecl | PrefixDecl )*
BaseDecl ::= 'base' IRI_REF
PrefixDecl
         ::= 'prefix' PNAME_NS IRI_REF
SelectQuery
         ::= SelectClause DatasetClause* WhereClause SolutionModifier
SubSelect
         ::= SelectClause WhereClause SolutionModifier
SelectClause
         ::= 'select' ( 'distinct' | 'reduced' )? ( ( Var | '(' Expression 'as' Var ')' )+ | '*' )
ConstructQuery
         ::= 'construct' ( ConstructTemplate DatasetClause* WhereClause | DatasetClause* 'where' '{' TriplesTemplate? '}' ) SolutionModifier
DescribeQuery
         ::= 'describe' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier
AskQuery ::= 'ask' DatasetClause* WhereClause
DatasetClause
         ::= 'from' ( DefaultGraphClause | NamedGraphClause )
DefaultGraphClause
         ::= SourceSelector
NamedGraphClause
         ::= 'named' SourceSelector
SourceSelector
         ::= IRIref
WhereClause
         ::= 'where'? GroupGraphPattern
SolutionModifier
         ::= GroupClause? HavingClause? OrderClause? LimitOffsetClauses?
GroupClause
         ::= 'group' 'by' GroupCondition+
GroupCondition
         ::= BuiltInCall
           | FunctionCall
           | '(' Expression ( 'as' Var )? ')'
           | Var
HavingClause
         ::= 'having' HavingCondition+
HavingCondition
         ::= Constraint
OrderClause
         ::= 'order' 'by' OrderCondition+
OrderCondition
         ::= ( 'asc' | 'desc' ) BrackettedExpression
           | Constraint
           | Var
LimitOffsetClauses
         ::= LimitClause OffsetClause?
           | OffsetClause LimitClause?
LimitClause
         ::= 'limit' INTEGER
OffsetClause
         ::= 'offset' INTEGER
BindingsClause
         ::= ( 'bindings' Var* '{' ( '(' BindingValue* ')' | NIL )* '}' )?
BindingValue
         ::= IRIref
           | RDFLiteral
           | NumericLiteral
           | BooleanLiteral
           | 'undef'
Update1  ::= Load
           | Clear
           | Drop
           | Add
           | Move
           | Copy
           | Create
           | InsertData
           | DeleteData
           | DeleteWhere
           | Modify
Load     ::= 'load' 'silent'? IRIref ( 'into' GraphRef )?
Clear    ::= 'clear' 'silent'? GraphRefAll
Drop     ::= 'drop' 'silent'? GraphRefAll
Create   ::= 'create' 'silent'? GraphRef
Add      ::= 'add' 'silent'? GraphOrDefault 'to' GraphOrDefault
Move     ::= 'move' 'silent'? GraphOrDefault 'to' GraphOrDefault
Copy     ::= 'copy' 'silent'? GraphOrDefault 'to' GraphOrDefault
InsertData
         ::= INSERT_DATA QuadData
DeleteData
         ::= DELETE_DATA QuadData
DeleteWhere
         ::= DELETE_WHERE QuadPattern
Modify   ::= ( 'with' IRIref )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'where' GroupGraphPattern
DeleteClause
         ::= 'delete' QuadPattern
InsertClause
         ::= 'insert' QuadPattern
UsingClause
         ::= 'using' 'named'? IRIref
GraphOrDefault
         ::= 'default'
           | 'graph'? IRIref
GraphRef ::= 'graph' IRIref
GraphRefAll
         ::= GraphRef
           | 'default'
           | 'named'
           | 'all'
QuadPattern
         ::= '{' Quads '}'
QuadData ::= '{' Quads '}'
Quads    ::= TriplesTemplate? ( QuadsNotTriples '.'? TriplesTemplate? )*
QuadsNotTriples
         ::= 'graph' VarOrIRIref '{' TriplesTemplate? '}'
TriplesTemplate
         ::= TriplesSameSubject ( '.' TriplesSameSubject )* '.'?
GroupGraphPattern
         ::= '{' ( SubSelect | GroupGraphPatternSub ) '}'
GroupGraphPatternSub
         ::= TriplesBlock? ( GraphPatternNotTriples '.'? TriplesBlock? )*
TriplesBlock
         ::= TriplesSameSubjectPath ( '.' TriplesSameSubjectPath )* '.'?
GraphPatternNotTriples
         ::= GroupOrUnionGraphPattern
           | OptionalGraphPattern
           | MinusGraphPattern
           | GraphGraphPattern
           | ServiceGraphPattern
           | Filter
           | Bind
OptionalGraphPattern
         ::= 'optional' GroupGraphPattern
GraphGraphPattern
         ::= 'graph' VarOrIRIref GroupGraphPattern
ServiceGraphPattern
         ::= 'service' 'silent'? VarOrIRIref GroupGraphPattern
Bind     ::= 'bind' '(' Expression 'as' Var ')'
MinusGraphPattern
         ::= 'minus' GroupGraphPattern
GroupOrUnionGraphPattern
         ::= GroupGraphPattern ( 'union' GroupGraphPattern )*
Filter   ::= 'filter' Constraint
Constraint
         ::= BrackettedExpression
           | BuiltInCall
           | FunctionCall
FunctionCall
         ::= IRIref ArgList
ArgList  ::= NIL
           | '(' 'distinct'? Expression ( ',' Expression )* ')'
ExpressionList
         ::= NIL
           | '(' Expression ( ',' Expression )* ')'
ConstructTemplate
         ::= '{' ( TriplesSameSubject ( '.' TriplesSameSubject )* '.'? )? '}'
TriplesSameSubject
         ::= VarOrTerm PropertyListNotEmpty
           | TriplesNode PropertyList
PropertyListNotEmpty
         ::= Verb ObjectList ( ';' ( Verb ObjectList )? )*
PropertyList
         ::= PropertyListNotEmpty?
ObjectList
         ::= Object ( ',' Object )*
Object   ::= GraphNode
Verb     ::= VarOrIRIref
           | 'a'
TriplesSameSubjectPath
         ::= VarOrTerm PropertyListNotEmptyPath
           | TriplesNode PropertyListPath
PropertyListNotEmptyPath
         ::= ( VerbPath | VerbSimple ) ObjectList ( ';' ( ( VerbPath | VerbSimple ) ObjectList )? )*
PropertyListPath
         ::= PropertyListNotEmpty?
VerbPath ::= Path
VerbSimple
         ::= Var
Path     ::= PathAlternative
PathAlternative
         ::= PathSequence ( '|' PathSequence )*
PathSequence
         ::= PathEltOrInverse ( '/' PathEltOrInverse )*
PathElt  ::= PathPrimary PathMod?
PathEltOrInverse
         ::= '^'? PathElt
PathMod  ::= '*'
           | '?'
           | '+'
           | '{' ( Integer ( ',' Integer? )? | ',' Integer ) '}'
PathPrimary
         ::= IRIref
           | 'a'
           | '!' PathNegatedPropertySet
           | '(' Path ')'
PathNegatedPropertySet
         ::= PathOneInPropertySet
           | '(' ( PathOneInPropertySet ( '|' PathOneInPropertySet )* )? ')'
PathOneInPropertySet
         ::= '^'? ( IRIref | 'a' )
Integer  ::= INTEGER
TriplesNode
         ::= Collection
           | BlankNodePropertyList
BlankNodePropertyList
         ::= '[' PropertyListNotEmpty ']'
Collection
         ::= '(' GraphNode+ ')'
GraphNode
         ::= VarOrTerm
           | TriplesNode
VarOrTerm
         ::= Var
           | GraphTerm
VarOrIRIref
         ::= Var
           | IRIref
Var      ::= VAR1
           | VAR2
GraphTerm
         ::= IRIref
           | RDFLiteral
           | NumericLiteral
           | BooleanLiteral
           | BlankNode
           | NIL
Expression
         ::= ConditionalOrExpression
ConditionalOrExpression
         ::= ConditionalAndExpression ( '||' ConditionalAndExpression )*
ConditionalAndExpression
         ::= ValueLogical ( '&&' ValueLogical )*
ValueLogical
         ::= RelationalExpression
RelationalExpression
         ::= NumericExpression ( ( '=' | '!=' | '<' | '>' | '<=' | '>=' ) NumericExpression | 'not'? 'in' ExpressionList )?
NumericExpression
         ::= AdditiveExpression
AdditiveExpression
         ::= MultiplicativeExpression ( ( '+' | '-' ) MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( '*' | '/' ) UnaryExpression )? )*
MultiplicativeExpression
         ::= UnaryExpression ( ( '*' | '/' ) UnaryExpression )*
UnaryExpression
         ::= ( '!' | '+' | '-' )? PrimaryExpression
PrimaryExpression
         ::= BrackettedExpression
           | BuiltInCall
           | IRIrefOrFunction
           | RDFLiteral
           | NumericLiteral
           | BooleanLiteral
           | Var
           | Aggregate
BrackettedExpression
         ::= '(' Expression ')'
BuiltInCall
         ::= ( ( ( 'str' | 'lang' | 'datatype' | 'iri' | 'uri' | 'ABS' | 'CEIL' | 'FLOOR' | 'ROUND' | 'STRLEN' | 'UCASE' | 'LCASE' | 'ENCODE_FOR_URI' | 'YEAR' | 'MONTH' | 'DAY' | 'HOURS' | 'MINUTES' | 'SECONDS' | 'TIMEZONE' | 'TZ' | 'MD5' | 'SHA1' | 'SHA224' | 'SHA256' | 'SHA384' | 'SHA512' | 'isIRI' | 'isURI' | 'isBlank' | 'isLiteral' | 'isNumeric' ) '(' | ( ( 'langmatches' | 'CONTAINS' | 'strSTARTS' | 'strENDS' | 'strlang' | 'strdt' | 'sameTerm' ) '(' | 'if' '(' Expression ',' ) Expression ',' ) Expression | 'bound' '(' Var ) ')'
           | 'bnode' ( '(' Expression ')' | NIL )
           | ( 'RAND' | 'NOW' ) NIL
           | ( 'CONCAT' | 'coalesce' ) ExpressionList
           | SubstringExpression
           | RegexExpression
           | ExistsFunc
           | NotExistsFunc
RegexExpression
         ::= 'regex' '(' Expression ',' Expression ( ',' Expression )? ')'
SubstringExpression
         ::= 'SUBSTR' '(' Expression ',' Expression ( ',' Expression )? ')'
ExistsFunc
         ::= 'exists' GroupGraphPattern
NotExistsFunc
         ::= 'not' 'exists' GroupGraphPattern
Aggregate
         ::= ( 'count' '(' 'distinct'? ( '*' | Expression ) | ( 'sum' | 'min' | 'max' | 'avg' | 'sample' ) '(' 'distinct'? Expression | 'group_concat' '(' 'distinct'? Expression ( ';' 'separator' '=' String )? ) ')'
IRIrefOrFunction
         ::= IRIref ArgList?
RDFLiteral
         ::= String ( LANGTAG | '^^' IRIref )?
NumericLiteral
         ::= NumericLiteralUnsigned
           | NumericLiteralPositive
           | NumericLiteralNegative
NumericLiteralUnsigned
         ::= INTEGER
           | DECIMAL
           | DOUBLE
NumericLiteralPositive
         ::= INTEGER_POSITIVE
           | DECIMAL_POSITIVE
           | DOUBLE_POSITIVE
NumericLiteralNegative
         ::= INTEGER_NEGATIVE
           | DECIMAL_NEGATIVE
           | DOUBLE_NEGATIVE
BooleanLiteral
         ::= 'true'
           | 'false'
String   ::= STRING_LITERAL1
           | STRING_LITERAL2
           | STRING_LITERAL_LONG1
           | STRING_LITERAL_LONG2
IRIref   ::= IRI_REF
           | PrefixedName
PrefixedName
         ::= PNAME_LN
           | PNAME_NS
BlankNode
         ::= BLANK_NODE_LABEL
           | ANON
IRI_REF  ::= IRIref

<?TOKENS?>

SINGLE_LINE_COMMENT
         ::= '#' [^#xA#xD]* #xD? #xA?
SINGLE_LINE_COMMENT_SLASH
         ::= '//' [^#xA#xD]* #xD? #xA?
WS       ::= [ #x9#xA#xD#xC]
WSC      ::= WS
           | SINGLE_LINE_COMMENT
IRIref   ::= '<' [^><"{}^\|`#x0-#x20]* '>'
PNAME_NS ::= PN_PREFIX? ':'
PNAME_LN ::= PNAME_NS PN_LOCAL
BLANK_NODE_LABEL
         ::= '_:' PN_LOCAL
VAR1     ::= '?' VARNAME
VAR2     ::= '$' VARNAME
LANGTAG  ::= '@' A2Z+ ( '-' A2ZN+ )*
A2Z      ::= [a-zA-Z]
A2ZN     ::= [a-zA-Z0-9]
SQL_STATEMENT
         ::= '[' '[' .* ']' ']'
INSERT_DATA
         ::= 'insert' WSC* 'data'
DELETE_DATA
         ::= 'delete' WSC* 'data'
DELETE_WHERE
         ::= 'delete' WSC* 'where'
NAME     ::= PN_CHARS_U NAMESUFFIX
DIGITS   ::= [0-9]+
INTEGER  ::= DIGITS
DECIMAL  ::= DIGITS? '.' DIGITS
DOUBLE   ::= ( [0-9]+ ( '.' [0-9]* )? | '.' [0-9]+ ) EXPONENT
INTEGER_POSITIVE
         ::= '+' INTEGER
DECIMAL_POSITIVE
         ::= '+' DECIMAL
DOUBLE_POSITIVE
         ::= '+' DOUBLE
INTEGER_NEGATIVE
         ::= '-' INTEGER
DECIMAL_NEGATIVE
         ::= '-' DECIMAL
DOUBLE_NEGATIVE
         ::= '-' DOUBLE
EXPONENT ::= [eE] [+#x2D]? [0-9]+
ECHAR    ::= '\' ( 't' | 'b' | 'n' | 'r' | 'f' | '\' | '"' | "'" )
STRING_LITERAL1
         ::= "'" ( [^'\#xA#xD] | ECHAR )* "'"
STRING_LITERAL2
         ::= '"' ( [^"\#xA#xD] | ECHAR )* '"'
STRING_LITERAL_LONG1
         ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''"
STRING_LITERAL_LONG2
         ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""'
NIL      ::= '(' WSC* ')'
ANON     ::= '[' WSC* ']'
PN_CHARS_BASE
         ::= [A-Za-z#xC0-#xD6#xD8-#xF6#xF8-#x2FF#x370-#x37D#x37F-#x1FFF#x200C-#x200D#x2070-#x218F#x2C00-#x2FEF#x3001-#xD7FF#xF900-#xFFFD]
PN_CHARS_U
         ::= PN_CHARS_BASE
           | '_'
PN_CHARS ::= PN_CHARS_U
           | [-0-9#xB7#x300-#x36F#x203F-#x2040]
PN_PREFIX
         ::= PN_CHARS_BASE ( ( PN_CHARS | '.' )* PN_CHARS )?
PN_LOCAL ::= ( PN_CHARS_U | [0-9] ) ( ( PN_CHARS | '.' )* PN_CHARS )?
VARNAME  ::= ( PN_CHARS_U | [0-9] ) NAMESUFFIX
NAMESUFFIX
         ::= ( PN_CHARS_U | [0-9#xB7#x300-#x36F#x203F-#x2040] )*
UNKNOWN  ::= [^ #x9#xA#xD#xC]+
EOF      ::= $

mingodad avatar Jul 19 '21 09:07 mingodad