@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix s: <http://www.w3.org/2001/sw/DataAccess/parsers/sparql#>.
@prefix : <http://www.w3.org/2001/sw/DataAccess/parsers/sparql#>.
@prefix re: <http://www.w3.org/2000/10/swap/grammar/regex#>.
@prefix g: <http://www.w3.org/2000/10/swap/grammar/ebnf#>.

:sparql rdfs:isDefinedBy <>; g:start :Query.

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

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

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

:PrefixDecl rdfs:label "PrefixDecl"; rdf:value "4";
 rdfs:comment "[4]     PrefixDecl    ::=       'PREFIX' PNAME_NS IRI_REF";
  g:seq (
    "PREFIX"
    :PNAME_NS
    :IRI_REF
   )
.

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

:ConstructQuery rdfs:label "ConstructQuery"; rdf:value "6";
 rdfs:comment "[6]     ConstructQuery    ::=       'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier";
  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";
  g:seq (
    "DESCRIBE"
    [ g:alt (
      [ g:plus 
        :VarOrIRIref
       ]
      "*"
     ) ]
    [ g:star 
      :DatasetClause
     ]
    [ g:opt 
      :WhereClause
     ]
    :SolutionModifier
   )
.

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

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

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

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

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

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

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

:LimitOffsetClauses rdfs:label "LimitOffsetClauses"; rdf:value "15";
 rdfs:comment "[15]    LimitOffsetClauses    ::=       ( LimitClause OffsetClause? | OffsetClause LimitClause? )";
  g:alt (
    [ g:seq (
      :LimitClause
      [ g:opt 
        :OffsetClause
       ]
     ) ]
    [ g:seq (
      :OffsetClause
      [ g:opt 
        :LimitClause
       ]
     ) ]
   )
.

:OrderClause rdfs:label "OrderClause"; rdf:value "16";
 rdfs:comment "[16]    OrderClause       ::=       'ORDER' 'BY' OrderCondition+";
  g:seq (
    "ORDER"
    "BY"
    [ g:plus 
      :OrderCondition
     ]
   )
.

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

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

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

:GroupGraphPattern rdfs:label "GroupGraphPattern"; rdf:value "20";
 rdfs:comment "[20]    GroupGraphPattern     ::=       '{' TriplesBlock? ( ( GraphPatternNotTriples | Filter ) '.'? TriplesBlock? )* '}'";
  g:seq (
    "{"
    [ g:opt 
      :TriplesBlock
     ]
    [ g:star 
      [ g:seq (
        [ g:alt (
          :GraphPatternNotTriples
          :Filter
         ) ]
        [ g:opt 
          "."
         ]
        [ g:opt 
          :TriplesBlock
         ]
       ) ]
     ]
    "}"
   )
.

:TriplesBlock rdfs:label "TriplesBlock"; rdf:value "21";
 rdfs:comment "[21]    TriplesBlock      ::=       TriplesSameSubject ( '.' TriplesBlock? )?";
  g:seq (
    :TriplesSameSubject
    [ g:opt 
      [ g:seq (
        "."
        [ g:opt 
          :TriplesBlock
         ]
       ) ]
     ]
   )
.

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

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

:GraphGraphPattern rdfs:label "GraphGraphPattern"; rdf:value "24";
 rdfs:comment "[24]    GraphGraphPattern     ::=       'GRAPH' VarOrIRIref GroupGraphPattern";
  g:seq (
    "GRAPH"
    :VarOrIRIref
    :GroupGraphPattern
   )
.

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

:Filter rdfs:label "Filter"; rdf:value "26";
 rdfs:comment "[26]    Filter    ::=       'FILTER' Constraint";
  g:seq (
    "FILTER"
    :Constraint
   )
.

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

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

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

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

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

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

:PropertyListNotEmpty rdfs:label "PropertyListNotEmpty"; rdf:value "33";
 rdfs:comment "[33]    PropertyListNotEmpty      ::=       Verb ObjectList ( ';' ( Verb ObjectList )? )*";
  g:seq (
    :Verb
    :ObjectList
    [ g:star 
      [ g:seq (
        ";"
        [ g:opt 
          [ g:seq (
            :Verb
            :ObjectList
           ) ]
         ]
       ) ]
     ]
   )
.

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

:ObjectList rdfs:label "ObjectList"; rdf:value "35";
 rdfs:comment "[35]    ObjectList    ::=       Object ( ',' Object )*";
  g:seq (
    :Object
    [ g:star 
      [ g:seq (
        ","
        :Object
       ) ]
     ]
   )
.

:Object rdfs:label "Object"; rdf:value "36";
 rdfs:comment "[36]    Object    ::=       GraphNode";
  g:seq ( :GraphNode )
.

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

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

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

:Collection rdfs:label "Collection"; rdf:value "40";
 rdfs:comment "[40]    Collection    ::=       '(' GraphNode+ ')'";
  g:seq (
    "("
    [ g:plus 
      :GraphNode
     ]
    ")"
   )
.

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

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

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

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

:GraphTerm rdfs:label "GraphTerm"; rdf:value "45";
 rdfs:comment "[45]    GraphTerm     ::=       IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL";
  g:alt (
    :IRIref
    :RDFLiteral
    :NumericLiteral
    :BooleanLiteral
    :BlankNode
    :NIL
   )
.

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

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

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

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

:RelationalExpression rdfs:label "RelationalExpression"; rdf:value "50";
 rdfs:comment "[50]    RelationalExpression      ::=       NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression )?";
  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";
  g:seq ( :AdditiveExpression )
.

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

:MultiplicativeExpression rdfs:label "MultiplicativeExpression"; rdf:value "53";
 rdfs:comment "[53]    MultiplicativeExpression      ::=       UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )*";
  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";
  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 | Var";
  g:alt (
    :BrackettedExpression
    :BuiltInCall
    :IRIrefOrFunction
    :RDFLiteral
    :NumericLiteral
    :BooleanLiteral
    :Var
   )
.

:BrackettedExpression rdfs:label "BrackettedExpression"; rdf:value "56";
 rdfs:comment "[56]    BrackettedExpression      ::=       '(' Expression ')'";
  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 ')' | 'sameTerm' '(' Expression ',' Expression ')' | 'isIRI' '(' Expression ')' | 'isURI' '(' Expression ')' | 'isBLANK' '(' Expression ')' | 'isLITERAL' '(' Expression ')' | RegexExpression";
  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 (
      "sameTerm"
      "("
      :Expression
      ","
      :Expression
      ")"
     ) ]
    [ 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 )? ')'";
  g:seq (
    "REGEX"
    "("
    :Expression
    ","
    :Expression
    [ g:opt 
      [ g:seq (
        ","
        :Expression
       ) ]
     ]
    ")"
   )
.

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

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

:NumericLiteral rdfs:label "NumericLiteral"; rdf:value "61";
 rdfs:comment "[61]    NumericLiteral    ::=       NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative";
  g:alt (
    :NumericLiteralUnsigned
    :NumericLiteralPositive
    :NumericLiteralNegative
   )
.

:NumericLiteralUnsigned rdfs:label "NumericLiteralUnsigned"; rdf:value "62";
 rdfs:comment "[62]    NumericLiteralUnsigned    ::=       INTEGER | DECIMAL | DOUBLE";
  g:alt (
    :INTEGER
    :DECIMAL
    :DOUBLE
   )
.

:NumericLiteralPositive rdfs:label "NumericLiteralPositive"; rdf:value "63";
 rdfs:comment "[63]    NumericLiteralPositive    ::=       INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE";
  g:alt (
    :INTEGER_POSITIVE
    :DECIMAL_POSITIVE
    :DOUBLE_POSITIVE
   )
.

:NumericLiteralNegative rdfs:label "NumericLiteralNegative"; rdf:value "64";
 rdfs:comment "[64]    NumericLiteralNegative    ::=       INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE";
  g:alt (
    :INTEGER_NEGATIVE
    :DECIMAL_NEGATIVE
    :DOUBLE_NEGATIVE
   )
.

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

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

:IRIref rdfs:label "IRIref"; rdf:value "67";
 rdfs:comment "[67]    IRIref    ::=       IRI_REF | PrefixedName";
  g:alt (
    :IRI_REF
    :PrefixedName
   )
.

:PrefixedName rdfs:label "PrefixedName"; rdf:value "68";
 rdfs:comment "[68]    PrefixedName      ::=       PNAME_LN | PNAME_NS";
  g:alt (
    :PNAME_LN
    :PNAME_NS
   )
.

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

:IRI_REF rdfs:label "IRI_REF"; rdf:value "70";
 rdfs:comment "[70]    IRI_REF       ::=       '<' ([^<>\"{}|^`\\]-[#x00-#x20])* '>'";
  re:seq (
    "<"
    [ re:star 
      [ re:diff (
        [  re:matches "[^<>\"{}|^`\\]"  ]
        [  re:matches "[\u0000-\u0020]"  ]
       ) ]
     ]
    ">"
   )
.

:PNAME_NS rdfs:label "PNAME_NS"; rdf:value "71";
 rdfs:comment "[71]    PNAME_NS      ::=       PN_PREFIX? ':'";
  re:seq (
    [ re:opt 
      :PN_PREFIX
     ]
    ":"
   )
.

:PNAME_LN rdfs:label "PNAME_LN"; rdf:value "72";
 rdfs:comment "[72]    PNAME_LN      ::=       PNAME_NS PN_LOCAL";
  re:seq (
    :PNAME_NS
    :PN_LOCAL
   )
.

:BLANK_NODE_LABEL rdfs:label "BLANK_NODE_LABEL"; rdf:value "73";
 rdfs:comment "[73]    BLANK_NODE_LABEL      ::=       '_:' PN_LOCAL";
  re:seq (
    "_:"
    :PN_LOCAL
   )
.

:VAR1 rdfs:label "VAR1"; rdf:value "74";
 rdfs:comment "[74]    VAR1      ::=       '?' VARNAME";
  re:seq (
    "?"
    :VARNAME
   )
.

:VAR2 rdfs:label "VAR2"; rdf:value "75";
 rdfs:comment "[75]    VAR2      ::=       '$' VARNAME";
  re:seq (
    "$"
    :VARNAME
   )
.

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

:INTEGER rdfs:label "INTEGER"; rdf:value "77";
 rdfs:comment "[77]    INTEGER       ::=       [0-9]+";
  re:plus 
    [  re:matches "[0-9]"  ]
.

:DECIMAL rdfs:label "DECIMAL"; rdf:value "78";
 rdfs:comment "[78]    DECIMAL       ::=       [0-9]+ '.' [0-9]* | '.' [0-9]+";
  re:alt (
    [ re:seq (
      [ re:plus 
        [  re:matches "[0-9]"  ]
       ]
      "."
      [ re:star 
        [  re:matches "[0-9]"  ]
       ]
     ) ]
    [ re:seq (
      "."
      [ re:plus 
        [  re:matches "[0-9]"  ]
       ]
     ) ]
   )
.

:DOUBLE rdfs:label "DOUBLE"; rdf:value "79";
 rdfs:comment "[79]    DOUBLE    ::=       [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT";
  re:alt (
    [ re:seq (
      [ re:plus 
        [  re:matches "[0-9]"  ]
       ]
      "."
      [ re:star 
        [  re:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
    [ re:seq (
      "."
      [ re:plus 
        [  re:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
    [ re:seq (
      [ re:plus 
        [  re:matches "[0-9]"  ]
       ]
      :EXPONENT
     ) ]
   )
.

:INTEGER_POSITIVE rdfs:label "INTEGER_POSITIVE"; rdf:value "80";
 rdfs:comment "[80]    INTEGER_POSITIVE      ::=       '+' INTEGER";
  re:seq (
    "+"
    :INTEGER
   )
.

:DECIMAL_POSITIVE rdfs:label "DECIMAL_POSITIVE"; rdf:value "81";
 rdfs:comment "[81]    DECIMAL_POSITIVE      ::=       '+' DECIMAL";
  re:seq (
    "+"
    :DECIMAL
   )
.

:DOUBLE_POSITIVE rdfs:label "DOUBLE_POSITIVE"; rdf:value "82";
 rdfs:comment "[82]    DOUBLE_POSITIVE       ::=       '+' DOUBLE";
  re:seq (
    "+"
    :DOUBLE
   )
.

:INTEGER_NEGATIVE rdfs:label "INTEGER_NEGATIVE"; rdf:value "83";
 rdfs:comment "[83]    INTEGER_NEGATIVE      ::=       '-' INTEGER";
  re:seq (
    "-"
    :INTEGER
   )
.

:DECIMAL_NEGATIVE rdfs:label "DECIMAL_NEGATIVE"; rdf:value "84";
 rdfs:comment "[84]    DECIMAL_NEGATIVE      ::=       '-' DECIMAL";
  re:seq (
    "-"
    :DECIMAL
   )
.

:DOUBLE_NEGATIVE rdfs:label "DOUBLE_NEGATIVE"; rdf:value "85";
 rdfs:comment "[85]    DOUBLE_NEGATIVE       ::=       '-' DOUBLE";
  re:seq (
    "-"
    :DOUBLE
   )
.

:EXPONENT rdfs:label "EXPONENT"; rdf:value "86";
 rdfs:comment "[86]    EXPONENT      ::=       [eE] [+-]? [0-9]+";
  re:seq (
    [  re:matches "[eE]"  ]
    [ re:opt 
      [  re:matches "[+-]"  ]
     ]
    [ re:plus 
      [  re:matches "[0-9]"  ]
     ]
   )
.

:STRING_LITERAL1 rdfs:label "STRING_LITERAL1"; rdf:value "87";
 rdfs:comment "[87]    STRING_LITERAL1       ::=       \"'\" ( ([^#x27#x5C#xA#xD]) | ECHAR )* \"'\"";
  re:seq (
    "'"
    [ re:star 
      [ re:alt (
        [  re:matches "[^\u0027\\\u005C\u000A\u000D]"  ]
        :ECHAR
       ) ]
     ]
    "'"
   )
.

:STRING_LITERAL2 rdfs:label "STRING_LITERAL2"; rdf:value "88";
 rdfs:comment "[88]    STRING_LITERAL2       ::=       '\"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '\"'";
  re:seq (
    "\""
    [ re:star 
      [ re:alt (
        [  re:matches "[^\u0022\\\u005C\u000A\u000D]"  ]
        :ECHAR
       ) ]
     ]
    "\""
   )
.

:STRING_LITERAL_LONG1 rdfs:label "STRING_LITERAL_LONG1"; rdf:value "89";
 rdfs:comment "[89]    STRING_LITERAL_LONG1      ::=       \"'''\" ( ( \"'\" | \"''\" )? ( [^'\\] | ECHAR ) )* \"'''\"";
  re:seq (
    "'''"
    [ re:star 
      [ re:seq (
        [ re:opt 
          [ re:alt (
            "'"
            "''"
           ) ]
         ]
        [ re:alt (
          [  re:matches "[^'\\]"  ]
          :ECHAR
         ) ]
       ) ]
     ]
    "'''"
   )
.

:STRING_LITERAL_LONG2 rdfs:label "STRING_LITERAL_LONG2"; rdf:value "90";
 rdfs:comment "[90]    STRING_LITERAL_LONG2      ::=       '\"\"\"' ( ( '\"' | '\"\"' )? ( [^\"\\] | ECHAR ) )* '\"\"\"'";
  re:seq (
    "\"\"\""
    [ re:star 
      [ re:seq (
        [ re:opt 
          [ re:alt (
            "\""
            "\"\""
           ) ]
         ]
        [ re:alt (
          [  re:matches "[^\"\\]"  ]
          :ECHAR
         ) ]
       ) ]
     ]
    "\"\"\""
   )
.

:ECHAR rdfs:label "ECHAR"; rdf:value "91";
 rdfs:comment "[91]    ECHAR     ::=       '\\' [tbnrf\\\"']";
  re:seq (
    "\\"
    [  re:matches "[tbnrf\\\"']"  ]
   )
.

:NIL rdfs:label "NIL"; rdf:value "92";
 rdfs:comment "[92]    NIL       ::=       '(' WS* ')'";
  re:seq (
    "("
    [ re:star 
      :WS
     ]
    ")"
   )
.

:WS rdfs:label "WS"; rdf:value "93";
 rdfs:comment "[93]    WS    ::=       #x20 | #x9 | #xD | #xA";
  re:alt (
    [  re:matches "[\u0020]"  ]
    [  re:matches "[\u0009]"  ]
    [  re:matches "[\u000D]"  ]
    [  re:matches "[\u000A]"  ]
   )
.

:ANON rdfs:label "ANON"; rdf:value "94";
 rdfs:comment "[94]    ANON      ::=       '[' WS* ']'";
  re:seq (
    "["
    [ re:star 
      :WS
     ]
    "]"
   )
.

:PN_CHARS_BASE rdfs:label "PN_CHARS_BASE"; rdf:value "95";
 rdfs:comment "[95]    PN_CHARS_BASE     ::=       [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]";
  re:alt (
    [  re:matches "[A-Z]"  ]
    [  re:matches "[a-z]"  ]
    [  re:matches "[\u00C0-\u00D6]"  ]
    [  re:matches "[\u00D8-\u00F6]"  ]
    [  re:matches "[\u00F8-\u02FF]"  ]
    [  re:matches "[\u0370-\u037D]"  ]
    [  re:matches "[\u037F-\u1FFF]"  ]
    [  re:matches "[\u200C-\u200D]"  ]
    [  re:matches "[\u2070-\u218F]"  ]
    [  re:matches "[\u2C00-\u2FEF]"  ]
    [  re:matches "[\u3001-\uD7FF]"  ]
    [  re:matches "[\uF900-\uFDCF]"  ]
    [  re:matches "[\uFDF0-\uFFFD]"  ]
    [  re:matches "[\u0000-\uFFFF]"  ]
   )
.

:PN_CHARS_U rdfs:label "PN_CHARS_U"; rdf:value "96";
 rdfs:comment "[96]    PN_CHARS_U    ::=       PN_CHARS_BASE | '_'";
  re:alt (
    :PN_CHARS_BASE
    "_"
   )
.

:VARNAME rdfs:label "VARNAME"; rdf:value "97";
 rdfs:comment "[97]    VARNAME       ::=       ( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*";
  re:seq (
    [ re:alt (
      :PN_CHARS_U
      [  re:matches "[0-9]"  ]
     ) ]
    [ re:star 
      [ re:alt (
        :PN_CHARS_U
        [  re:matches "[0-9]"  ]
        [  re:matches "[\u00B7]"  ]
        [  re:matches "[\u0300-\u036F]"  ]
        [  re:matches "[\u203F-\u2040]"  ]
       ) ]
     ]
   )
.

:PN_CHARS rdfs:label "PN_CHARS"; rdf:value "98";
 rdfs:comment "[98]    PN_CHARS      ::=       PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]";
  re:alt (
    :PN_CHARS_U
    "-"
    [  re:matches "[0-9]"  ]
    [  re:matches "[\u00B7]"  ]
    [  re:matches "[\u0300-\u036F]"  ]
    [  re:matches "[\u203F-\u2040]"  ]
   )
.

:PN_PREFIX rdfs:label "PN_PREFIX"; rdf:value "99";
 rdfs:comment "[99]    PN_PREFIX     ::=       PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)?";
  re:seq (
    :PN_CHARS_BASE
    [ re:opt 
      [ re:seq (
        [ re:star 
          [ re:alt (
            :PN_CHARS
            "."
           ) ]
         ]
        :PN_CHARS
       ) ]
     ]
   )
.

:PN_LOCAL rdfs:label "PN_LOCAL"; rdf:value "100";
 rdfs:comment "[100]       PN_LOCAL      ::=       ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?";
  re:seq (
    [ re:alt (
      :PN_CHARS_U
      [  re:matches "[0-9]"  ]
     ) ]
    [ re:opt 
      [ re:seq (
        [ re:star 
          [ re:alt (
            :PN_CHARS
            "."
           ) ]
         ]
        :PN_CHARS
       ) ]
     ]
   )
.
