-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Description
Using this tool https://www.bottlecaps.de/convert/ (using https://github.com/konclude/rasqal) and manually adding the tokens from rasqal/blob/master/src/sparql_lexer.l we can see a railroad diagram for the grammar in rasqal/master/src/sparql_parser.y 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/konclude/rasqal/master/src/sparql_parser.y
*/
/* converted on Sat Jul 17, 2021, 13:47 (UTC+02) by bison-to-w3c v0.53 which is Copyright (c) 2011-2021 by Gunther Rademacher <grd@gmx.net> */
Sparql ::= Query
| Update
Query ::= Prologue ExplainOpt ReportFormat ValuesClauseOpt
ExplainOpt
::= EXPLAIN?
ReportFormat
::= SelectQuery
| ConstructQuery
| DescribeQuery
| AskQuery
Update ::= Prologue UpdateOperation UpdateTailOpt
UpdateTailOpt
::= ( ';' Update? )?
UpdateOperation
::= DeleteQuery
| InsertQuery
| UpdateQuery
| ClearQuery
| CreateQuery
| DropQuery
| LoadQuery
| AddQuery
| MoveQuery
| CopyQuery
Prologue ::= BaseDeclOpt ( PREFIX IDENTIFIER URI_LITERAL )*
BaseDeclOpt
::= ( BASE URI_LITERAL )?
SelectQuery
::= SelectClause DatasetClauseListOpt WhereClause SolutionModifier
SubSelect
::= SelectClause WhereClause SolutionModifier ValuesClauseOpt
SelectClause
::= SELECT ( DISTINCT | REDUCED )? SelectExpressionList
SelectExpressionList
::= SelectTerm ( ','? SelectTerm )*
| '*'
SelectTerm
::= Var
| '(' Expression AS VarOrBadVarName ')'
AggregateExpression
::= CountAggregateExpression
| SumAggregateExpression
| AvgAggregateExpression
| MinAggregateExpression
| MaxAggregateExpression
| GroupConcatAggregateExpression
| SampleAggregateExpression
DistinctOpt
::= DISTINCT?
ExpressionOrStar
::= Expression
| '*'
CountAggregateExpression
::= COUNT '(' DistinctOpt ExpressionOrStar ')'
SumAggregateExpression
::= SUM '(' DistinctOpt Expression ')'
AvgAggregateExpression
::= AVG '(' DistinctOpt Expression ')'
MinAggregateExpression
::= MIN '(' DistinctOpt Expression ')'
MaxAggregateExpression
::= MAX '(' DistinctOpt Expression ')'
SeparatorOpt
::= ( ';' SEPARATOR EQ STRING )?
ExpressionList
::= Expression ( ',' Expression )*
GroupConcatAggregateExpression
::= GROUP_CONCAT '(' DistinctOpt ExpressionList SeparatorOpt ')'
SampleAggregateExpression
::= SAMPLE '(' DistinctOpt Expression ')'
ConstructQuery
::= CONSTRUCT ( ConstructTemplate DatasetClauseListOpt WhereClause | DatasetClauseListOpt WHERE '{' ConstructTriples '}' ) SolutionModifier
DescribeQuery
::= DESCRIBE ( VarOrIRIref ( ','? VarOrIRIref )* | '*' ) DatasetClauseListOpt WhereClauseOpt SolutionModifier
AskQuery ::= ASK DatasetClauseListOpt WhereClause
DatasetClause
::= FROM ( DefaultGraphClause | NamedGraphClause )
GraphRef ::= GRAPH URI_LITERAL
DeleteQuery
::= DELETE ( DatasetClauseList WhereClauseOpt | '{' ModifyTemplateList '}' WhereClause | DATA '{' GraphTriples '}' | WHERE GroupGraphPattern )
GraphTriples
::= TriplesBlock
| GRAPH URI_LITERAL '{' TriplesBlock '}'
GraphTemplate
::= GRAPH VarOrIRIref '{' ConstructTriples '}'
ModifyTemplate
::= ConstructTriples
| GraphTemplate
ModifyTemplateList
::= ModifyTemplate+
InsertQuery
::= INSERT ( ( DatasetClauseList | '{' ModifyTemplateList '}' ) WhereClauseOpt | DATA '{' GraphTriples '}' )
UpdateQuery
::= WITH URI_LITERAL ( DELETE '{' ModifyTemplateList '}' ( INSERT '{' ModifyTemplateList '}' )? WhereClauseOpt | INSERT ( '{' ModifyTemplateList '}' WhereClauseOpt | DATA '{' GraphTriples '}' ) )
GraphRefAll
::= GraphRef
| GRAPH? DEFAULT
| NAMED
| ALL
ClearQuery
::= CLEAR ( SilentOpt GraphRefAll )?
SilentOpt
::= SILENT?
CreateQuery
::= CREATE SilentOpt ( URI_LITERAL | GraphRef )
DropQuery
::= DROP SilentOpt GraphRefAll
GraphOrDefault
::= DEFAULT
| URI_LITERAL
OldGraphRef
::= GraphRef
| URI_LITERAL
| DEFAULT
LoadQuery
::= LOAD SilentOpt ( URI_LITERAL | URI_LITERAL+ INTO OldGraphRef )
AddQuery ::= ADD SilentOpt GraphOrDefault TO GraphOrDefault
MoveQuery
::= MOVE SilentOpt GraphOrDefault TO GraphOrDefault
CopyQuery
::= COPY SilentOpt GraphOrDefault TO GraphOrDefault
DatasetClauseList
::= DatasetClause+
DatasetClauseListOpt
::= DatasetClauseList?
DefaultGraphClause
::= SourceSelector
NamedGraphClause
::= NAMED SourceSelector
SourceSelector
::= IRIref
WhereClause
::= WHERE? GroupGraphPattern
WhereClauseOpt
::= WhereClause?
SolutionModifier
::= GroupClauseOpt HavingClauseOpt OrderClauseOpt LimitOffsetClausesOpt
AsVarOpt ::= ( AS Var )?
GroupCondition
::= BuiltInCall
| FunctionCall
| '(' Expression AsVarOpt ')'
| Var
GroupClauseOpt
::= ( GROUP BY GroupCondition+ )?
HavingCondition
::= Constraint
HavingClauseOpt
::= ( HAVING HavingCondition+ )?
LimitOffsetClausesOpt
::= ( LimitClause OffsetClause? | OffsetClause LimitClause? )?
OrderClauseOpt
::= ( ORDER BY OrderCondition+ )?
OrderCondition
::= ( ASC | DESC )? BrackettedExpression
| FunctionCall
| Var
| BuiltInCall
LimitClause
::= LIMIT INTEGER_LITERAL
OffsetClause
::= OFFSET INTEGER_LITERAL
ValuesClauseOpt
::= ( VALUES DataBlock )?
VarListOpt
::= Var*
DataBlockRowListOpt
::= DataBlockRow*
DataBlockRow
::= '(' DataBlockValueList? ')'
DataBlockValueList
::= DataBlockValue+
RDFLiteral
::= STRING ( LANGTAG | HATHAT IRIref )?
| NumericLiteral HATHAT IRIref
DataBlockValue
::= IRIref
| RDFLiteral
| NumericLiteral
| BOOLEAN_LITERAL
| UNDEF
GroupGraphPattern
::= '{' ( SubSelect | GroupGraphPatternSub ) '}'
GroupGraphPatternSub
::= TriplesBlockOpt GraphPatternList? GraphPatternList*
TriplesBlockOpt
::= TriplesBlock?
GraphPatternList
::= GraphPatternListFilter DotOptional TriplesBlockOpt
GraphPatternListFilter
::= GraphPatternNotTriples
| Filter
DotOptional
::= '.'?
TriplesBlock
::= TriplesSameSubject ( '.' TriplesBlockOpt )?
GraphPatternNotTriples
::= GroupOrUnionGraphPattern
| OptionalGraphPattern
| MinusGraphPattern
| GraphGraphPattern
| ServiceGraphPattern
| LetGraphPattern
| Bind
| InlineDataGraphPattern
OptionalGraphPattern
::= OPTIONAL GroupGraphPattern
GraphGraphPattern
::= GRAPH VarOrIRIref GroupGraphPattern
ServiceGraphPattern
::= SERVICE SilentOpt VarOrIRIref GroupGraphPattern
Bind ::= BIND '(' Expression AS Var ')'
InlineData
::= VALUES DataBlock
DataBlock
::= InlineDataOneVar
| InlineDataFull
InlineDataOneVar
::= Var '{' DataBlockValueListOpt '}'
DataBlockValueListOpt
::= DataBlockValueList?
InlineDataFull
::= '(' VarListOpt ')' '{' DataBlockRowListOpt '}'
InlineDataGraphPattern
::= InlineData
MinusGraphPattern
::= MINUS GroupGraphPattern
GroupOrUnionGraphPattern
::= GroupGraphPattern ( UNION GroupGraphPattern )*
LetGraphPattern
::= LET '(' Var ASSIGN Expression ')'
Filter ::= FILTER Constraint
Constraint
::= BrackettedExpression
| BuiltInCall
| FunctionCall
ParamsOpt
::= ';'?
FunctionCall
::= ( IRIref '(' DistinctOpt ArgListNoBraces ParamsOpt | IRIrefBrace ArgListNoBraces ) ')'
CoalesceExpression
::= COALESCE ArgList
ArgList ::= '(' ArgListNoBraces ')'
ArgListNoBraces
::= Expression? ( ',' Expression )*
ConstructTemplate
::= '{' ConstructTriplesOpt '}'
ConstructTriplesOpt
::= ConstructTriples?
ConstructTriples
::= TriplesSameSubject ( '.' ConstructTriplesOpt )?
TriplesSameSubject
::= VarOrTerm PropertyListNotEmpty
| TriplesNode PropertyList
PropertyListNotEmpty
::= Verb ObjectList PropertyListTailOpt
PropertyListTailOpt
::= ( ';' PropertyList )?
PropertyList
::= PropertyListNotEmpty?
ObjectList
::= Object ObjectTail
ObjectTail
::= ( ',' ObjectList )?
Object ::= GraphNode
Verb ::= VarOrIRIref
| A
TriplesNode
::= Collection
| BlankNodePropertyList
BlankNodePropertyList
::= '[' PropertyListNotEmpty ']'
Collection
::= '(' GraphNode+ ')'
GraphNode
::= VarOrTerm
| TriplesNode
VarOrTerm
::= Var
| GraphTerm
VarOrIRIref
::= Var
| IRIref
Var ::= ( '?' | '$' ) VarName
VarName ::= IDENTIFIER
VarOrBadVarName
::= ( '?' | '$' )? VarName
GraphTerm
::= IRIref
| RDFLiteral
| NumericLiteral
| BOOLEAN_LITERAL
| BlankNode
| '(' ')'
Expression
::= ConditionalAndExpression ( SC_OR ConditionalAndExpression )*
ConditionalAndExpression
::= RelationalExpression ( SC_AND RelationalExpression )*
RelationalExpression
::= AdditiveExpression ( ( EQ | NEQ | LT | GT | LE | GE ) AdditiveExpression | NOT? IN ArgList )?
AdditiveExpression
::= MultiplicativeExpression AdExOpExpressionListInner*
AdExOpExpressionListInner
::= ( '+' | '-' ) MultiplicativeExpression
| ( NumericLiteralPositive | NumericLiteralNegative ) AdExOpUnaryExpressionListOpt
AdExOpUnaryExpressionListOpt
::= AdExOpUnaryExpression*
AdExOpUnaryExpression
::= ( '*' | '/' ) UnaryExpression
MultiplicativeExpression
::= UnaryExpression MuExOpUnaryExpression*
MuExOpUnaryExpression
::= ( '*' | '/' ) UnaryExpression
UnaryExpression
::= ( '!' | '+' | '-' )? PrimaryExpression
PrimaryExpression
::= BrackettedExpression
| BuiltInCall
| FunctionCall
| GraphTerm
| Var
| AggregateExpression
BrackettedExpression
::= '(' Expression ')'
BuiltInCall
::= ( ( ( STR | LANG | DATATYPE | IRI | URI | ABS | CEIL | FLOOR | ROUND | MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512 | ISURI | ISBLANK | ISLITERAL | ISNUMERIC ) '(' | ( ( LANGMATCHES | STRLANG | STRDT | SAMETERM ) '(' | IF '(' Expression ',' ) Expression ',' ) Expression | BOUND '(' Var | ( RAND | UUID | STRUUID ) '(' | BNODE '(' Expression? ) ')'
| StringExpression
| CoalesceExpression
| RegexExpression
| DatetimeBuiltinAccessors
| DatetimeExtensions
StringExpression
::= ( ( ( STRLEN | UCASE | LCASE | ENCODE_FOR_URI ) '(' | ( ( STRSTARTS | STRENDS | CONTAINS | STRBEFORE | STRAFTER ) '(' | ( SUBSTR '(' | REPLACE '(' Expression ',' ) ( Expression ',' )? ) Expression ',' ) Expression | CONCAT '(' ExpressionList ) ')'
RegexExpression
::= REGEX '(' Expression ',' Expression ( ',' Expression )? ')'
DatetimeBuiltinAccessors
::= ( YEAR | MONTH | DAY | HOURS | MINUTES | SECONDS | TIMEZONE | TZ ) '(' Expression ')'
DatetimeExtensions
::= ( ( CURRENT_DATETIME | NOW ) '(' | ( FROM_UNIXTIME | TO_UNIXTIME ) '(' Expression ) ')'
IRIrefBrace
::= URI_LITERAL_BRACE
| QNAME_LITERAL_BRACE
NumericLiteral
::= NumericLiteralUnsigned
| NumericLiteralPositive
| NumericLiteralNegative
NumericLiteralUnsigned
::= INTEGER_LITERAL
| DECIMAL_LITERAL
| DOUBLE_LITERAL
NumericLiteralPositive
::= INTEGER_POSITIVE_LITERAL
| DECIMAL_POSITIVE_LITERAL
| DOUBLE_POSITIVE_LITERAL
NumericLiteralNegative
::= INTEGER_NEGATIVE_LITERAL
| DECIMAL_NEGATIVE_LITERAL
| DOUBLE_NEGATIVE_LITERAL
IRIref ::= URI_LITERAL
| QNAME_LITERAL
BlankNode
::= BLANK_LITERAL
| '[' ']'
// Tokens from https://github.com/konclude/rasqal/blob/master/src/sparql_lexer.l
SELECT ::= "SELECT"
FROM ::= "FROM"
WHERE ::= "WHERE"
PREFIX ::= "PREFIX"
DESCRIBE ::= "DESCRIBE"
CONSTRUCT ::= "CONSTRUCT"
ASK ::= "ASK"
DISTINCT ::= "DISTINCT"
REDUCED ::= "REDUCED"
LIMIT ::= "LIMIT"
UNION ::= "UNION"
OPTIONAL ::= "OPTIONAL"
BASE ::= "BASE"
BOUND ::= "BOUND"
STRLANG ::= "STRLANG"
STRDT ::= "STRDT"
STR ::= "STR"
LANG ::= "LANG"
DATATYPE ::= "DATATYPE"
ISURI ::= "ISURI"
ISBLANK ::= "ISBLANK"
ISLITERAL ::= "ISLITERAL"
GRAPH ::= "GRAPH"
NAMED ::= "NAMED"
FILTER ::= "FILTER"
OFFSET ::= "OFFSET"
ORDER ::= "ORDER"
BY ::= "BY"
REGEX ::= "REGEX"
ASC ::= "ASC"
DESC ::= "DESC"
LANGMATCHES ::= "LANGMATCHES"
EXPLAIN ::= "EXPLAIN"
GROUP ::= "GROUP"
HAVING ::= "HAVING"
COUNT ::= "COUNT"
SUM ::= "SUM"
AVG ::= "AVG"
MIN ::= "MIN"
MAX ::= "MAX"
AS ::= "AS"
DELETE ::= "DELETE"
INSERT ::= "INSERT"
SAMETERM ::= "SAMETERM"
LET ::= "LET"
COALESCE ::= "COALESCE"
WITH ::= "WITH"
CLEAR ::= "CLEAR"
CREATE ::= "CREATE"
SILENT ::= "SILENT"
DATA ::= "DATA"
DROP ::= "DROP"
LOAD ::= "LOAD"
INTO ::= "INTO"
IF ::= "IF"
IRI ::= "IRI"
URI ::= "URI"
BNODE ::= "BNODE"
DEFAULT ::= "DEFAULT"
NOT ::= "NOT"
IN ::= "IN"
GROUP_CONCAT ::= "GROUP_CONCAT"
SEPARATOR ::= "SEPARATOR"
BIND ::= "BIND"
BINDINGS ::= "BINDINGS"
UNDEF ::= "UNDEF"
SERVICE ::= "SERVICE"
MINUS ::= "MINUS"
ISNUMERIC ::= "ISNUMERIC"
SAMPLE ::= "SAMPLE"
YEAR ::= "YEAR"
MONTH ::= "MONTH"
DAY ::= "DAY"
HOURS ::= "HOURS"
MINUTES ::= "MINUTES"
SECONDS ::= "SECONDS"
TIMEZONE ::= "TIMEZONE"
CURRENT_DATETIME ::= "CURRENT_DATETIME"
NOW ::= "NOW"
FROM_UNIXTIME ::= "FROM_UNIXTIME"
TO_UNIXTIME ::= "TO_UNIXTIME"
CONCAT ::= "CONCAT"
STRLEN ::= "STRLEN"
SUBSTR ::= "SUBSTR"
UCASE ::= "UCASE"
LCASE ::= "LCASE"
STRSTARTS ::= "STRSTARTS"
STRENDS ::= "STRENDS"
CONTAINS ::= "CONTAINS"
ENCODE_FOR_URI ::= "ENCODE_FOR_URI"
TO ::= "TO"
ADD ::= "ADD"
MOVE ::= "MOVE"
COPY ::= "COPY"
ALL ::= "ALL"
TZ ::= "TZ"
RAND ::= "RAND"
ABS ::= "ABS"
ROUND ::= "ROUND"
CEIL ::= "CEIL"
FLOOR ::= "FLOOR"
MD5 ::= "MD5"
SHA1 ::= "SHA1"
SHA224 ::= "SHA224"
SHA256 ::= "SHA256"
SHA384 ::= "SHA384"
SHA512 ::= "SHA512"
STRBEFORE ::= "STRBEFORE"
STRAFTER ::= "STRAFTER"
REPLACE ::= "REPLACE"
UUID ::= "UUID"
STRUUID ::= "STRUUID"
VALUES ::= "VALUES"
A ::= "a"
SC_OR ::= "||"
SC_AND ::= "&&"
EQ ::= "="
NEQ ::= "!="
LT ::= "<"
GT ::= ">"
LE ::= "<="
GE ::= ">="
ASSIGN ::= ":="
HATHAT ::= "^^"
Metadata
Metadata
Assignees
Labels
No labels