@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix : <http://www.w3.org/2001/sw/DataAccess/rq23/parsers/sparql#>.
@prefix g: <http://www.w3.org/2001/sw/DataAccess/rq23/parsers/grammar@@#>.
#@@ case insensitivity of 'BASE' and the like is not expressed.

:Query rdfs:label "Query"; rdf:value "1";
 rdfs:comment "[1]    	Query  	  ::=    	Prolog( SelectQuery | ConstructQuery | DescribeQuery | AskQuery )";
 a g:NonTerminal;
  g:seq (
    :Prolog
    [ g:alt (
      :SelectQuery
      :ConstructQuery
      :DescribeQuery
      :AskQuery
     ) ]
   )
.

:Prolog rdfs:label "Prolog"; rdf:value "2";
 rdfs:comment "[2]   	Prolog 	  ::=   	BaseDecl? PrefixDecl*";
 a g:NonTerminal;
  g:seq (
    [ g:opt 
      :BaseDecl
     ]
    [ g:star 
      :PrefixDecl
     ]
   )
.

:BaseDecl rdfs:label "BaseDecl"; rdf:value "3";
 rdfs:comment "[3]   	BaseDecl 	  ::=   	'BASE' Q_IRI_REF";
 a g:NonTerminal;
  g:seq (
    "BASE"
    :Q_IRI_REF
   )
.

:PrefixDecl rdfs:label "PrefixDecl"; rdf:value "4";
 rdfs:comment "[4]   	PrefixDecl 	  ::=   	'PREFIX' QNAME_NS Q_IRI_REF";
 a g:NonTerminal;
  g:seq (
    "PREFIX"
    :QNAME_NS
    :Q_IRI_REF
   )
.

:SelectQuery rdfs:label "SelectQuery"; rdf:value "5";
 rdfs:comment "[5]   	SelectQuery 	  ::=   	'SELECT' 'DISTINCT'? ( Var+ | '*' ) DatasetClause* WhereClause SolutionModifier";
 a g:NonTerminal;
  g:seq (
    "SELECT"
    [ g:opt 
      "DISTINCT"
     ]
    [ g:alt (
      [ g:rep 
        :Var
       ]
      "*"
     ) ]
    [ g:star 
      :DatasetClause
     ]
    :WhereClause
    :SolutionModifier
   )
.

:ConstructQuery rdfs:label "ConstructQuery"; rdf:value "6";
 rdfs:comment "[6]   	ConstructQuery 	  ::=   	'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier";
 a g:NonTerminal;
  g:seq (
    "CONSTRUCT"
    :ConstructTemplate
    [ g:star 
      :DatasetClause
     ]
    :WhereClause
    :SolutionModifier
   )
.

:DescribeQuery rdfs:label "DescribeQuery"; rdf:value "7";
 rdfs:comment "[7]   	DescribeQuery 	  ::=   	'DESCRIBE' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier";
 a g:NonTerminal;
  g:seq (
    "DESCRIBE"
    [ g:alt (
      [ g:rep 
        :VarOrIRIref
       ]
      "*"
     ) ]
    [ g:star 
      :DatasetClause
     ]
    [ g:opt 
      :WhereClause
     ]
    :SolutionModifier
   )
.

:AskQuery rdfs:label "AskQuery"; rdf:value "8";
 rdfs:comment "[8]   	AskQuery 	  ::=   	'ASK' DatasetClause* WhereClause";
 a g:NonTerminal;
  g:seq (
    "ASK"
    [ g:star 
      :DatasetClause
     ]
    :WhereClause
   )
.

:DatasetClause rdfs:label "DatasetClause"; rdf:value "9";
 rdfs:comment "[9]   	DatasetClause 	  ::=   	'FROM' ( DefaultGraphClause | NamedGraphClause )";
 a g:NonTerminal;
  g:seq (
    "FROM"
    [ g:alt (
      :DefaultGraphClause
      :NamedGraphClause
     ) ]
   )
.

:DefaultGraphClause rdfs:label "DefaultGraphClause"; rdf:value "10";
 rdfs:comment "[10]   	DefaultGraphClause 	  ::=   	SourceSelector";
 a g:NonTerminal;
  g:seq ( :SourceSelector )
.

:NamedGraphClause rdfs:label "NamedGraphClause"; rdf:value "11";
 rdfs:comment "[11]   	NamedGraphClause 	  ::=   	'NAMED' SourceSelector";
 a g:NonTerminal;
  g:seq (
    "NAMED"
    :SourceSelector
   )
.

:SourceSelector rdfs:label "SourceSelector"; rdf:value "12";
 rdfs:comment "[12]   	SourceSelector 	  ::=   	IRIref";
 a g:NonTerminal;
  g:seq ( :IRIref )
.

:WhereClause rdfs:label "WhereClause"; rdf:value "13";
 rdfs:comment "[13]   	WhereClause 	  ::=   	'WHERE'? GroupGraphPattern";
 a g:NonTerminal;
  g:seq (
    [ g:opt 
      "WHERE"
     ]
    :GroupGraphPattern
   )
.

:SolutionModifier rdfs:label "SolutionModifier"; rdf:value "14";
 rdfs:comment "[14]   	SolutionModifier 	  ::=   	OrderClause? LimitClause? OffsetClause?";
 a g:NonTerminal;
  g:seq (
    [ g:opt 
      :OrderClause
     ]
    [ g:opt 
      :LimitClause
     ]
    [ g:opt 
      :OffsetClause
     ]
   )
.

:OrderClause rdfs:label "OrderClause"; rdf:value "15";
 rdfs:comment "[15]   	OrderClause 	  ::=   	'ORDER' 'BY' OrderCondition+";
 a g:NonTerminal;
  g:seq (
    "ORDER"
    "BY"
    [ g:rep 
      :OrderCondition
     ]
   )
.

:OrderCondition rdfs:label "OrderCondition"; rdf:value "16";
 rdfs:comment "[16]   	OrderCondition 	  ::=   	( ( 'ASC' | 'DESC' ) BrackettedExpression )| ( FunctionCall | Var | BrackettedExpression )";
 a g:NonTerminal;
  g:alt (
    [ g:seq (
      [ g:alt (
        "ASC"
        "DESC"
       ) ]
      :BrackettedExpression
     ) ]
    [ g:alt (
      :FunctionCall
      :Var
      :BrackettedExpression
     ) ]
   )
.

:LimitClause rdfs:label "LimitClause"; rdf:value "17";
 rdfs:comment "[17]   	LimitClause 	  ::=   	'LIMIT' INTEGER";
 a g:NonTerminal;
  g:seq (
    "LIMIT"
    :INTEGER
   )
.

:OffsetClause rdfs:label "OffsetClause"; rdf:value "18";
 rdfs:comment "[18]   	OffsetClause 	  ::=   	'OFFSET' INTEGER";
 a g:NonTerminal;
  g:seq (
    "OFFSET"
    :INTEGER
   )
.

:GroupGraphPattern rdfs:label "GroupGraphPattern"; rdf:value "19";
 rdfs:comment "[19]   	GroupGraphPattern 	  ::=   	'{' GraphPattern '}'";
 a g:NonTerminal;
  g:seq (
    "{"
    :GraphPattern
    "}"
   )
.

:GraphPattern rdfs:label "GraphPattern"; rdf:value "20";
 rdfs:comment "[20]   	GraphPattern 	  ::=   	FilteredBasicGraphPattern ( GraphPatternNotTriples '.'? GraphPattern )?";
 a g:NonTerminal;
  g:seq (
    :FilteredBasicGraphPattern
    [ g:opt 
      [ g:seq (
        :GraphPatternNotTriples
        [ g:opt 
          "."
         ]
        :GraphPattern
       ) ]
     ]
   )
.

:FilteredBasicGraphPattern rdfs:label "FilteredBasicGraphPattern"; rdf:value "21";
 rdfs:comment "[21]   	FilteredBasicGraphPattern 	  ::=   	BlockOfTriples? ( Constraint '.'? FilteredBasicGraphPattern )?";
 a g:NonTerminal;
  g:seq (
    [ g:opt 
      :BlockOfTriples
     ]
    [ g:opt 
      [ g:seq (
        :Constraint
        [ g:opt 
          "."
         ]
        :FilteredBasicGraphPattern
       ) ]
     ]
   )
.

:BlockOfTriples rdfs:label "BlockOfTriples"; rdf:value "22";
 rdfs:comment "[22]   	BlockOfTriples 	  ::=   	TriplesSameSubject ( '.' TriplesSameSubject? )*";
 a g:NonTerminal;
  g:seq (
    :TriplesSameSubject
    [ g:star 
      [ g:seq (
        "."
        [ g:opt 
          :TriplesSameSubject
         ]
       ) ]
     ]
   )
.

:GraphPatternNotTriples rdfs:label "GraphPatternNotTriples"; rdf:value "23";
 rdfs:comment "[23]   	GraphPatternNotTriples 	  ::=   	OptionalGraphPattern | GroupOrUnionGraphPattern | GraphGraphPattern";
 a g:NonTerminal;
  g:alt (
    :OptionalGraphPattern
    :GroupOrUnionGraphPattern
    :GraphGraphPattern
   )
.

:OptionalGraphPattern rdfs:label "OptionalGraphPattern"; rdf:value "24";
 rdfs:comment "[24]   	OptionalGraphPattern 	  ::=   	'OPTIONAL' GroupGraphPattern";
 a g:NonTerminal;
  g:seq (
    "OPTIONAL"
    :GroupGraphPattern
   )
.

:GraphGraphPattern rdfs:label "GraphGraphPattern"; rdf:value "25";
 rdfs:comment "[25]   	GraphGraphPattern 	  ::=   	'GRAPH' VarOrBlankNodeOrIRIref GroupGraphPattern";
 a g:NonTerminal;
  g:seq (
    "GRAPH"
    :VarOrBlankNodeOrIRIref
    :GroupGraphPattern
   )
.

:GroupOrUnionGraphPattern rdfs:label "GroupOrUnionGraphPattern"; rdf:value "26";
 rdfs:comment "[26]   	GroupOrUnionGraphPattern 	  ::=   	GroupGraphPattern ( 'UNION' GroupGraphPattern )*";
 a g:NonTerminal;
  g:seq (
    :GroupGraphPattern
    [ g:star 
      [ g:seq (
        "UNION"
        :GroupGraphPattern
       ) ]
     ]
   )
.

:Constraint rdfs:label "Constraint"; rdf:value "27";
 rdfs:comment "[27]   	Constraint 	  ::=   	'FILTER' ( BrackettedExpression | BuiltInCall | FunctionCall )";
 a g:NonTerminal;
  g:seq (
    "FILTER"
    [ g:alt (
      :BrackettedExpression
      :BuiltInCall
      :FunctionCall
     ) ]
   )
.

:FunctionCall rdfs:label "FunctionCall"; rdf:value "28";
 rdfs:comment "[28]   	FunctionCall 	  ::=   	IRIref ArgList";
 a g:NonTerminal;
  g:seq (
    :IRIref
    :ArgList
   )
.

:ArgList rdfs:label "ArgList"; rdf:value "29";
 rdfs:comment "[29]   	ArgList 	  ::=   	( NIL | '(' Expression ( ',' Expression )* ')' )";
 a g:NonTerminal;
  g:alt (
    :NIL
    [ g:seq (
      "("
      :Expression
      [ g:star 
        [ g:seq (
          ","
          :Expression
         ) ]
       ]
      ")"
     ) ]
   )
.

:ConstructTemplate rdfs:label "ConstructTemplate"; rdf:value "30";
 rdfs:comment "[30]   	ConstructTemplate 	  ::=   	'{' ConstructTriples '}'";
 a g:NonTerminal;
  g:seq (
    "{"
    :ConstructTriples
    "}"
   )
.

:ConstructTriples rdfs:label "ConstructTriples"; rdf:value "31";
 rdfs:comment "[31]   	ConstructTriples 	  ::=   	( TriplesSameSubject ( '.' ConstructTriples )? )?";
 a g:NonTerminal;
  g:opt 
    [ g:seq (
      :TriplesSameSubject
      [ g:opt 
        [ g:seq (
          "."
          :ConstructTriples
         ) ]
       ]
     ) ]
.

:TriplesSameSubject rdfs:label "TriplesSameSubject"; rdf:value "32";
 rdfs:comment "[32]   	TriplesSameSubject 	  ::=   	VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList";
 a g:NonTerminal;
  g:alt (
    [ g:seq (
      :VarOrTerm
      :PropertyListNotEmpty
     ) ]
    [ g:seq (
      :TriplesNode
      :PropertyList
     ) ]
   )
.

:PropertyList rdfs:label "PropertyList"; rdf:value "33";
 rdfs:comment "[33]   	PropertyList 	  ::=   	PropertyListNotEmpty?";
 a g:NonTerminal;
  g:opt 
    :PropertyListNotEmpty
.

:PropertyListNotEmpty rdfs:label "PropertyListNotEmpty"; rdf:value "34";
 rdfs:comment "[34]   	PropertyListNotEmpty 	  ::=   	Verb ObjectList ( ';' PropertyList )?";
 a g:NonTerminal;
  g:seq (
    :Verb
    :ObjectList
    [ g:opt 
      [ g:seq (
        ";"
        :PropertyList
       ) ]
     ]
   )
.

:ObjectList rdfs:label "ObjectList"; rdf:value "35";
 rdfs:comment "[35]   	ObjectList 	  ::=   	GraphNode ( ',' ObjectList )?";
 a g:NonTerminal;
  g:seq (
    :GraphNode
    [ g:opt 
      [ g:seq (
        ","
        :ObjectList
       ) ]
     ]
   )
.

:Verb rdfs:label "Verb"; rdf:value "36";
 rdfs:comment "[36]   	Verb 	  ::=   	VarOrIRIref | 'a'";
 a g:NonTerminal;
  g:alt (
    :VarOrIRIref
    "a"
   )
.

:TriplesNode rdfs:label "TriplesNode"; rdf:value "37";
 rdfs:comment "[37]   	TriplesNode 	  ::=   	Collection | BlankNodePropertyList";
 a g:NonTerminal;
  g:alt (
    :Collection
    :BlankNodePropertyList
   )
.

:BlankNodePropertyList rdfs:label "BlankNodePropertyList"; rdf:value "38";
 rdfs:comment "[38]   	BlankNodePropertyList 	  ::=   	'[' PropertyListNotEmpty ']'";
 a g:NonTerminal;
  g:seq (
    "["
    :PropertyListNotEmpty
    "]"
   )
.

:Collection rdfs:label "Collection"; rdf:value "39";
 rdfs:comment "[39]   	Collection 	  ::=   	'(' GraphNode+ ')'";
 a g:NonTerminal;
  g:seq (
    "("
    [ g:rep 
      :GraphNode
     ]
    ")"
   )
.

:GraphNode rdfs:label "GraphNode"; rdf:value "40";
 rdfs:comment "[40]   	GraphNode 	  ::=   	VarOrTerm | TriplesNode";
 a g:NonTerminal;
  g:alt (
    :VarOrTerm
    :TriplesNode
   )
.

:VarOrTerm rdfs:label "VarOrTerm"; rdf:value "41";
 rdfs:comment "[41]   	VarOrTerm 	  ::=   	Var | GraphTerm";
 a g:NonTerminal;
  g:alt (
    :Var
    :GraphTerm
   )
.

:VarOrIRIref rdfs:label "VarOrIRIref"; rdf:value "42";
 rdfs:comment "[42]   	VarOrIRIref 	  ::=   	Var | IRIref";
 a g:NonTerminal;
  g:alt (
    :Var
    :IRIref
   )
.

:VarOrBlankNodeOrIRIref rdfs:label "VarOrBlankNodeOrIRIref"; rdf:value "43";
 rdfs:comment "[43]   	VarOrBlankNodeOrIRIref 	  ::=   	Var | BlankNode | IRIref";
 a g:NonTerminal;
  g:alt (
    :Var
    :BlankNode
    :IRIref
   )
.

:Var rdfs:label "Var"; rdf:value "44";
 rdfs:comment "[44]   	Var 	  ::=   	VAR1 | VAR2";
 a g:NonTerminal;
  g:alt (
    :VAR1
    :VAR2
   )
.

:GraphTerm rdfs:label "GraphTerm"; rdf:value "45";
 rdfs:comment "[45]   	GraphTerm 	  ::=   	IRIref | RDFLiteral | ( '-' | '+' )? NumericLiteral | BooleanLiteral | BlankNode | NIL";
 a g:NonTerminal;
  g:alt (
    :IRIref
    :RDFLiteral
    [ g:seq (
      [ g:opt 
        [ g:alt (
          "-"
          "+"
         ) ]
       ]
      :NumericLiteral
     ) ]
    :BooleanLiteral
    :BlankNode
    :NIL
   )
.

:Expression rdfs:label "Expression"; rdf:value "46";
 rdfs:comment "[46]   	Expression 	  ::=   	ConditionalOrExpression";
 a g:NonTerminal;
  g:seq ( :ConditionalOrExpression )
.

:ConditionalOrExpression rdfs:label "ConditionalOrExpression"; rdf:value "47";
 rdfs:comment "[47]   	ConditionalOrExpression 	  ::=   	ConditionalAndExpression ( '||' ConditionalAndExpression )*";
 a g:NonTerminal;
  g:seq (
    :ConditionalAndExpression
    [ g:star 
      [ g:seq (
        "||"
        :ConditionalAndExpression
       ) ]
     ]
   )
.

:ConditionalAndExpression rdfs:label "ConditionalAndExpression"; rdf:value "48";
 rdfs:comment "[48]   	ConditionalAndExpression 	  ::=   	ValueLogical ( '&&' ValueLogical )*";
 a g:NonTerminal;
  g:seq (
    :ValueLogical
    [ g:star 
      [ g:seq (
        "&&"
        :ValueLogical
       ) ]
     ]
   )
.

:ValueLogical rdfs:label "ValueLogical"; rdf:value "49";
 rdfs:comment "[49]   	ValueLogical 	  ::=   	RelationalExpression";
 a g:NonTerminal;
  g:seq ( :RelationalExpression )
.

:RelationalExpression rdfs:label "RelationalExpression"; rdf:value "50";
 rdfs:comment "[50]   	RelationalExpression 	  ::=   	NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression )?";
 a g:NonTerminal;
  g:seq (
    :NumericExpression
    [ g:opt 
      [ g:alt (
        [ g:seq (
          "="
          :NumericExpression
         ) ]
        [ g:seq (
          "!="
          :NumericExpression
         ) ]
        [ g:seq (
          "<"
          :NumericExpression
         ) ]
        [ g:seq (
          ">"
          :NumericExpression
         ) ]
        [ g:seq (
          "<="
          :NumericExpression
         ) ]
        [ g:seq (
          ">="
          :NumericExpression
         ) ]
       ) ]
     ]
   )
.

:NumericExpression rdfs:label "NumericExpression"; rdf:value "51";
 rdfs:comment "[51]   	NumericExpression 	  ::=   	AdditiveExpression";
 a g:NonTerminal;
  g:seq ( :AdditiveExpression )
.

:AdditiveExpression rdfs:label "AdditiveExpression"; rdf:value "52";
 rdfs:comment "[52]   	AdditiveExpression 	  ::=   	MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression )*";
 a g:NonTerminal;
  g:seq (
    :MultiplicativeExpression
    [ g:star 
      [ g:alt (
        [ g:seq (
          "+"
          :MultiplicativeExpression
         ) ]
        [ g:seq (
          "-"
          :MultiplicativeExpression
         ) ]
       ) ]
     ]
   )
.

:MultiplicativeExpression rdfs:label "MultiplicativeExpression"; rdf:value "53";
 rdfs:comment "[53]   	MultiplicativeExpression 	  ::=   	UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )*";
 a g:NonTerminal;
  g:seq (
    :UnaryExpression
    [ g:star 
      [ g:alt (
        [ g:seq (
          "*"
          :UnaryExpression
         ) ]
        [ g:seq (
          "/"
          :UnaryExpression
         ) ]
       ) ]
     ]
   )
.

:UnaryExpression rdfs:label "UnaryExpression"; rdf:value "54";
 rdfs:comment "[54]   	UnaryExpression 	  ::=   	  '!' PrimaryExpression| '+' PrimaryExpression| '-' PrimaryExpression| PrimaryExpression";
 a g:NonTerminal;
  g:alt (
    [ g:seq (
      "!"
      :PrimaryExpression
     ) ]
    [ g:seq (
      "+"
      :PrimaryExpression
     ) ]
    [ g:seq (
      "-"
      :PrimaryExpression
     ) ]
    :PrimaryExpression
   )
.

:PrimaryExpression rdfs:label "PrimaryExpression"; rdf:value "55";
 rdfs:comment "[55]   	PrimaryExpression 	  ::=   	BrackettedExpression | BuiltInCall | IRIrefOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | Var";
 a g:NonTerminal;
  g:alt (
    :BrackettedExpression
    :BuiltInCall
    :IRIrefOrFunction
    :RDFLiteral
    :NumericLiteral
    :BooleanLiteral
    :BlankNode
    :Var
   )
.

:BrackettedExpression rdfs:label "BrackettedExpression"; rdf:value "56";
 rdfs:comment "[56]   	BrackettedExpression 	  ::=   	'(' Expression ')'";
 a g:NonTerminal;
  g:seq (
    "("
    :Expression
    ")"
   )
.

:BuiltInCall rdfs:label "BuiltInCall"; rdf:value "57";
 rdfs:comment "[57]   	BuiltInCall 	  ::=   	  'STR' '(' Expression ')'| 'LANG' '(' Expression ')'| 'LANGMATCHES' '(' Expression ',' Expression ')'| 'DATATYPE' '(' Expression ')'| 'BOUND' '(' Var ')'| 'isIRI' '(' Expression ')'| 'isURI' '(' Expression ')'| 'isBLANK' '(' Expression ')'| 'isLITERAL' '(' Expression ')'| RegexExpression";
 a g:NonTerminal;
  g:alt (
    [ g:seq (
      "STR"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "LANG"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "LANGMATCHES"
      "("
      :Expression
      ","
      :Expression
      ")"
     ) ]
    [ g:seq (
      "DATATYPE"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "BOUND"
      "("
      :Var
      ")"
     ) ]
    [ g:seq (
      "isIRI"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "isURI"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "isBLANK"
      "("
      :Expression
      ")"
     ) ]
    [ g:seq (
      "isLITERAL"
      "("
      :Expression
      ")"
     ) ]
    :RegexExpression
   )
.

:RegexExpression rdfs:label "RegexExpression"; rdf:value "58";
 rdfs:comment "[58]   	RegexExpression 	  ::=   	'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')'";
 a g:NonTerminal;
  g:seq (
    "REGEX"
    "("
    :Expression
    ","
    :Expression
    [ g:opt 
      [ g:seq (
        ","
        :Expression
       ) ]
     ]
    ")"
   )
.

:IRIrefOrFunction rdfs:label "IRIrefOrFunction"; rdf:value "59";
 rdfs:comment "[59]   	IRIrefOrFunction 	  ::=   	IRIref ArgList?";
 a g:NonTerminal;
  g:seq (
    :IRIref
    [ g:opt 
      :ArgList
     ]
   )
.

:RDFLiteral rdfs:label "RDFLiteral"; rdf:value "60";
 rdfs:comment "[60]   	RDFLiteral 	  ::=   	String ( LANGTAG | ( '^^' IRIref ) )?";
 a g:NonTerminal;
  g:seq (
    :String
    [ g:opt 
      [ g:alt (
        :LANGTAG
        [ g:seq (
          "^^"
          :IRIref
         ) ]
       ) ]
     ]
   )
.

:NumericLiteral rdfs:label "NumericLiteral"; rdf:value "61";
 rdfs:comment "[61]   	NumericLiteral 	  ::=   	INTEGER | DECIMAL | DOUBLE";
 a g:NonTerminal;
  g:alt (
    :INTEGER
    :DECIMAL
    :DOUBLE
   )
.

:BooleanLiteral rdfs:label "BooleanLiteral"; rdf:value "62";
 rdfs:comment "[62]   	BooleanLiteral 	  ::=   	'true' | 'false'";
 a g:NonTerminal;
  g:alt (
    "true"
    "false"
   )
.

:String rdfs:label "String"; rdf:value "63";
 rdfs:comment "[63]   	String 	  ::=   	STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2";
 a g:NonTerminal;
  g:alt (
    :STRING_LITERAL1
    :STRING_LITERAL2
    :STRING_LITERAL_LONG1
    :STRING_LITERAL_LONG2
   )
.

:IRIref rdfs:label "IRIref"; rdf:value "64";
 rdfs:comment "[64]   	IRIref 	  ::=   	Q_IRI_REF | QName";
 a g:NonTerminal;
  g:alt (
    :Q_IRI_REF
    :QName
   )
.

:QName rdfs:label "QName"; rdf:value "65";
 rdfs:comment "[65]   	QName 	  ::=   	QNAME | QNAME_NS";
 a g:NonTerminal;
  g:alt (
    :QNAME
    :QNAME_NS
   )
.

:BlankNode rdfs:label "BlankNode"; rdf:value "66";
 rdfs:comment "[66]   	BlankNode 	  ::=   	BLANK_NODE_LABEL | ANON";
 a g:NonTerminal;
  g:alt (
    :BLANK_NODE_LABEL
    :ANON
   )
.

:Q_IRI_REF rdfs:label "Q_IRI_REF"; rdf:value "67";
 rdfs:comment "[67]   	Q_IRI_REF 	  ::=   	'<' ([^<>'{}|^`]-[#x00-#x20])* '>'";
 a g:Terminal;
  g:seq (
    "<"
    [ g:star 
      [ g:diff (
        [  g:matches "[^<>'{}|^`]"  ]
        [  g:matches "[#x00-#x20]"  ]
       ) ]
     ]
    ">"
   )
.

:QNAME_NS rdfs:label "QNAME_NS"; rdf:value "68";
 rdfs:comment "[68]   	QNAME_NS 	  ::=   	NCNAME_PREFIX? ':'";
 a g:Terminal;
  g:seq (
    [ g:opt 
      :NCNAME_PREFIX
     ]
    ":"
   )
.

:QNAME rdfs:label "QNAME"; rdf:value "69";
 rdfs:comment "[69]   	QNAME 	  ::=   	NCNAME_PREFIX? ':' NCNAME?";
 a g:Terminal;
  g:seq (
    [ g:opt 
      :NCNAME_PREFIX
     ]
    ":"
    [ g:opt 
      :NCNAME
     ]
   )
.

:BLANK_NODE_LABEL rdfs:label "BLANK_NODE_LABEL"; rdf:value "70";
 rdfs:comment "[70]   	BLANK_NODE_LABEL 	  ::=   	'_:' NCNAME";
 a g:Terminal;
  g:seq (
    "_:"
    :NCNAME
   )
.

:VAR1 rdfs:label "VAR1"; rdf:value "71";
 rdfs:comment "[71]   	VAR1 	  ::=   	'?' VARNAME";
 a g:Terminal;
  g:seq (
    "?"
    :VARNAME
   )
.

:VAR2 rdfs:label "VAR2"; rdf:value "72";
 rdfs:comment "[72]   	VAR2 	  ::=   	'$' VARNAME";
 a g:Terminal;
  g:seq (
    "$"
    :VARNAME
   )
.

:LANGTAG rdfs:label "LANGTAG"; rdf:value "73";
 rdfs:comment "[73]   	LANGTAG 	  ::=   	'@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*";
 a g:Terminal;
  g:seq (
    "@"
    [ g:rep 
      [  g:matches "[a-zA-Z]"  ]
     ]
    [ g:star 
      [ g:seq (
        "-"
        [ g:rep 
          [  g:matches "[a-zA-Z0-9]"  ]
         ]
       ) ]
     ]
   )
.

:INTEGER rdfs:label "INTEGER"; rdf:value "74";
 rdfs:comment "[74]   	INTEGER 	  ::=   	[0-9]+";
 a g:Terminal;
  g:rep 
    [  g:matches "[0-9]"  ]
.

:DECIMAL rdfs:label "DECIMAL"; rdf:value "75";
 rdfs:comment "[75]   	DECIMAL 	  ::=   	[0-9]+ '.' [0-9]* | '.' [0-9]+";
 a g:Terminal;
  g:alt (
    [ g:seq (
      [ g:rep 
        [  g:matches "[0-9]"  ]
       ]
      "."
      [ g:star 
        [  g:matches "[0-9]"  ]
       ]
     ) ]
    [ g:seq (
      "."
      [ g:rep 
        [  g:matches "[0-9]"  ]
       ]
     ) ]
   )
.

:DOUBLE rdfs:label "DOUBLE"; rdf:value "76";
 rdfs:comment "[76]   	DOUBLE 	  ::=   	[0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT";
 a g:Terminal;
  g:alt (
    [ g:seq (
      [ g:rep 
        [  g:matches "[0-9]"  ]
       ]
      "."
      [ g:star 
        [  g:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
    [ g:seq (
      "."
      [ g:rep 
        [  g:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
    [ g:seq (
      [ g:rep 
        [  g:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
   )
.

:EXPONENT rdfs:label "EXPONENT"; rdf:value "77";
 rdfs:comment "[77]   	EXPONENT 	  ::=   	[eE] [+-]? [0-9]+";
 a g:Terminal;
  g:seq (
    [  g:matches "[eE]"  ]
    [ g:opt 
      [  g:matches "[+-]"  ]
     ]
    [ g:rep 
      [  g:matches "[0-9]"  ]
     ]
   )
.

:STRING_LITERAL1 rdfs:label "STRING_LITERAL1"; rdf:value "78";
 rdfs:comment "[78]   	STRING_LITERAL1 	  ::=   	\"'\" ( ([^#x27#x5C#xA#xD]) | ECHAR | UCHAR )* \"'\"";
 a g:Terminal;
  g:seq (
    "'"
    [ g:star 
      [ g:alt (
        [  g:matches "[^#x27#x5C#xA#xD]"  ]
        :ECHAR
        :UCHAR
       ) ]
     ]
    "'"
   )
.

:STRING_LITERAL2 rdfs:label "STRING_LITERAL2"; rdf:value "79";
 rdfs:comment "[79]   	STRING_LITERAL2 	  ::=   	'\"' ( ([^#x22#x5C#xA#xD]) | ECHAR | UCHAR )* '\"'";
 a g:Terminal;
  g:seq (
    "\""
    [ g:star 
      [ g:alt (
        [  g:matches "[^#x22#x5C#xA#xD]"  ]
        :ECHAR
        :UCHAR
       ) ]
     ]
    "\""
   )
.

:STRING_LITERAL_LONG1 rdfs:label "STRING_LITERAL_LONG1"; rdf:value "80";
 rdfs:comment "[80]   	STRING_LITERAL_LONG1 	  ::=   	\"'''\" ( ( \"'\" | \"''\" )? ( [^'\\\\] | ECHAR | UCHAR ) )* \"'''\"";
 a g:Terminal;
  g:seq (
    "'''"
    [ g:star 
      [ g:seq (
        [ g:opt 
          [ g:alt (
            "'"
            "''"
           ) ]
         ]
        [ g:alt (
          [  g:matches "[^'\\\\]"  ]
          :ECHAR
          :UCHAR
         ) ]
       ) ]
     ]
    "'''"
   )
.

:STRING_LITERAL_LONG2 rdfs:label "STRING_LITERAL_LONG2"; rdf:value "81";
 rdfs:comment "[81]   	STRING_LITERAL_LONG2 	  ::=   	'\"\"\"' ( ( '\"' | '\"\"' )? ( [^\"\\\\] | ECHAR | UCHAR ) )* '\"\"\"'";
 a g:Terminal;
  g:seq (
    "\"\"\""
    [ g:star 
      [ g:seq (
        [ g:opt 
          [ g:alt (
            "\""
            "\"\""
           ) ]
         ]
        [ g:alt (
          [  g:matches "[^\"\\\\]"  ]
          :ECHAR
          :UCHAR
         ) ]
       ) ]
     ]
    "\"\"\""
   )
.

:ECHAR rdfs:label "ECHAR"; rdf:value "82";
 rdfs:comment "[82]   	ECHAR 	  ::=   	'\\\\' [tbnrf\\\\\"']";
 a g:Terminal;
  g:seq (
    "\\\\"
    [  g:matches "[tbnrf\\\\\"']"  ]
   )
.

:UCHAR rdfs:label "UCHAR"; rdf:value "83";
 rdfs:comment "[83]   	UCHAR 	  ::=   	'\\\\' ( 'u' HEX HEX HEX HEX | 'U' HEX HEX HEX HEX HEX HEX HEX HEX )";
 a g:Terminal;
  g:seq (
    "\\\\"
    [ g:alt (
      [ g:seq (
        "u"
        :HEX
        :HEX
        :HEX
        :HEX
       ) ]
      [ g:seq (
        "U"
        :HEX
        :HEX
        :HEX
        :HEX
        :HEX
        :HEX
        :HEX
        :HEX
       ) ]
     ) ]
   )
.

:HEX rdfs:label "HEX"; rdf:value "84";
 rdfs:comment "[84]   	HEX 	  ::=   	[0-9] | [A-F] | [a-f]";
 a g:Terminal;
  g:alt (
    [  g:matches "[0-9]"  ]
    [  g:matches "[A-F]"  ]
    [  g:matches "[a-f]"  ]
   )
.

:NIL rdfs:label "NIL"; rdf:value "85";
 rdfs:comment "[85]   	NIL 	  ::=   	'(' WS* ')'";
 a g:Terminal;
  g:seq (
    "("
    [ g:star 
      :WS
     ]
    ")"
   )
.

:WS rdfs:label "WS"; rdf:value "86";
 rdfs:comment "[86]   	WS 	  ::=   	#x20 | #x9 | #xD | #xA";
 a g:Terminal;
  g:alt (
    [  g:matches "\\x20"  ]
    [  g:matches "\\x9"  ]
    [  g:matches "\\xD"  ]
    [  g:matches "\\xA"  ]
   )
.

:ANON rdfs:label "ANON"; rdf:value "87";
 rdfs:comment "[87]   	ANON 	  ::=   	'[' WS* ']'";
 a g:Terminal;
  g:seq (
    "["
    [ g:star 
      :WS
     ]
    "]"
   )
.

:NCCHAR1p rdfs:label "NCCHAR1p"; rdf:value "88";
 rdfs:comment "[88]   	NCCHAR1p 	  ::=   	  [A-Z]| [a-z]| [#x00C0-#x00D6]| [#x00D8-#x00F6]| [#x00F8-#x02FF]| [#x0370-#x037D]| [#x037F-#x1FFF]| [#x200C-#x200D]| [#x2070-#x218F]| [#x2C00-#x2FEF]| [#x3001-#xD7FF]| [#xF900-#xFDCF]| [#xFDF0-#xFFFD]| [#x10000-#xEFFFF]| UCHAR";
 a g:Terminal;
  g:alt (
    [  g:matches "[A-Z]"  ]
    [  g:matches "[a-z]"  ]
    [  g:matches "[#x00C0-#x00D6]"  ]
    [  g:matches "[#x00D8-#x00F6]"  ]
    [  g:matches "[#x00F8-#x02FF]"  ]
    [  g:matches "[#x0370-#x037D]"  ]
    [  g:matches "[#x037F-#x1FFF]"  ]
    [  g:matches "[#x200C-#x200D]"  ]
    [  g:matches "[#x2070-#x218F]"  ]
    [  g:matches "[#x2C00-#x2FEF]"  ]
    [  g:matches "[#x3001-#xD7FF]"  ]
    [  g:matches "[#xF900-#xFDCF]"  ]
    [  g:matches "[#xFDF0-#xFFFD]"  ]
    [  g:matches "[#x10000-#xEFFFF]"  ]
    :UCHAR
   )
.

:NCCHAR1 rdfs:label "NCCHAR1"; rdf:value "89";
 rdfs:comment "[89]   	NCCHAR1 	  ::=   	NCCHAR1p | '_'";
 a g:Terminal;
  g:alt (
    :NCCHAR1p
    "_"
   )
.

:VARNAME rdfs:label "VARNAME"; rdf:value "90";
 rdfs:comment "[90]   	VARNAME 	  ::=   	( NCCHAR1 | [0-9] ) ( NCCHAR1 | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*";
 a g:Terminal;
  g:seq (
    [ g:alt (
      :NCCHAR1
      [  g:matches "[0-9]"  ]
     ) ]
    [ g:star 
      [ g:alt (
        :NCCHAR1
        [  g:matches "[0-9]"  ]
        [  g:matches "\\x00B7"  ]
        [  g:matches "[#x0300-#x036F]"  ]
        [  g:matches "[#x203F-#x2040]"  ]
       ) ]
     ]
   )
.

:NCCHAR rdfs:label "NCCHAR"; rdf:value "91";
 rdfs:comment "[91]   	NCCHAR 	  ::=   	NCCHAR1 | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]";
 a g:Terminal;
  g:alt (
    :NCCHAR1
    "-"
    [  g:matches "[0-9]"  ]
    [  g:matches "\\x00B7"  ]
    [  g:matches "[#x0300-#x036F]"  ]
    [  g:matches "[#x203F-#x2040]"  ]
   )
.

:NCNAME_PREFIX rdfs:label "NCNAME_PREFIX"; rdf:value "92";
 rdfs:comment "[92]   	NCNAME_PREFIX 	  ::=   	NCCHAR1p ((NCCHAR|'.')* NCCHAR)?";
 a g:Terminal;
  g:seq (
    :NCCHAR1p
    [ g:opt 
      [ g:seq (
        [ g:star 
          [ g:alt (
            :NCCHAR
            "."
           ) ]
         ]
        :NCCHAR
       ) ]
     ]
   )
.

:NCNAME rdfs:label "NCNAME"; rdf:value "93";
 rdfs:comment "[93]   	NCNAME 	  ::=   	NCCHAR1 ((NCCHAR|'.')* NCCHAR)?";
 a g:Terminal;
  g:seq (
    :NCCHAR1
    [ g:opt 
      [ g:seq (
        [ g:star 
          [ g:alt (
            :NCCHAR
            "."
           ) ]
         ]
        :NCCHAR
       ) ]
     ]
   )
.
