このドキュメントでは、¬<><∪∪の文法を Input Specification よりも厳密に定義します。ゴール記号は Root です。この文法は、¬<><∪∪のソースファイルで使用されているものを基にしているため、終端・非終端記号の名前は Input Specification などで使用されているものとは異なります。? は省略可能、* は0回以上の繰り返しを表します。
StringLiteral ::= <Javaの文字列リテラル> CharacterLiteral ::= <Javaの文字リテラル> IDENTIFIER ::= <Javaの識別子および予約語で、$で始まらないもの>
加えて、以下においてJavaの文字列リテラルの形式で表現される文字列も終端記号となります。また、次の文字列も終端記号となります。"||" "&&" "--" "!!" "**" "++" "??"
AbsorberOrTypeName ::= IDENTIFIER TypeName ::= IDENTIFIER SubtokenName ::= IDENTIFIER SymbolName ::= IDENTIFIER
Root ::= ParserDeclaration ConstructorScope? definition* "\u001A"? ParserDeclaration ::= "$protected"? "$parser" JavaName ";" JavaName ::= IDENTIFIER ( "." IDENTIFIER )* ConstructorScope ::= "$protected" "$constructor" ";" definition ::= SubtokenDefinition | TokenDefinition | WhiteTokenDefinition | TokenReservation | WhiteTokenReservation | TypeDefinition | AliasDefinition | AbsorberDefinition2
SubtokenDefinition ::= "$subtoken" IDENTIFIER "=" tokenExpression ";" TokenDefinition ::= "$token" IDENTIFIER "=" "$weak"? tokenExpression ";" WhiteTokenDefinition ::= "$white" "$token" IDENTIFIER "=" "$weak"? tokenExpression ";" TokenReservation ::= "$token" IDENTIFIER ";" WhiteTokenReservation ::= "$white" "$token" IDENTIFIER ";" tokenExpression ::= SelectiveTokenExpression SelectiveTokenExpression ::= termTokenExpression ( "|" termTokenExpression )* termTokenExpression ::= SequentialTokenExpression | IntersectionTokenExpression | DifferenceTokenExpression IntersectionTokenExpression ::= termTokenExpression "&" SequentialTokenExpression DifferenceTokenExpression ::= termTokenExpression "-" DifferenceTokenExpressionRightOperand DifferenceTokenExpressionRightOperand ::= SequentialTokenExpression SequentialTokenExpression ::= binaryTokenExpression* binaryTokenExpression ::= prefixTokenExpression | OneOrMoreSeparatedTokenExpression | ZeroOrMoreSeparatedTokenExpression OneOrMoreSeparatedTokenExpression ::= binaryTokenExpression "++" prefixTokenExpression ZeroOrMoreSeparatedTokenExpression ::= binaryTokenExpression "**" prefixTokenExpression prefixTokenExpression ::= postfixTokenExpression | ComplementaryTokenExpression ComplementaryTokenExpression ::= "!" prefixTokenExpression postfixTokenExpression ::= StarTokenExpression | PlusTokenExpression | OptionalTokenExpression1 | primaryTokenExpression StarTokenExpression ::= StarTokenExpressionConcrete EmptyTokenExpression PlusTokenExpression ::= postfixTokenExpression "+" OptionalTokenExpression1 ::= postfixTokenExpression "?" EmptyTokenExpression EmptyTokenExpression ::= primaryTokenExpression ::= CharacterTokenExpression | CharacterRangeTokenExpression | StringTokenExpression | IdentifierTokenExpression | OptionalTokenExpression2 | parenthesizedTokenExpression CharacterTokenExpression ::= CharacterLiteral CharacterRangeTokenExpression ::= CharacterLiteral ".." CharacterLiteral StringTokenExpression ::= StringLiteral IdentifierTokenExpression ::= SubtokenName OptionalTokenExpression2 ::= "[" tokenExpression "]" EmptyTokenExpression parenthesizedTokenExpression ::= "(" tokenExpression ")"
TypeDefinition ::= modifiers IDENTIFIER superTypes? "{" expression "}" modifiers ::= ( "$protected" | "$private" )? "$abstract"? | "$parsable" | "$protected-parsable" "$protected"? superTypes ::= "->" TypeName ( "&" TypeName )* AliasDefinition ::= IDENTIFIER "=" expression ";" AbsorberDefinition2 ::= ( "$protected" | "$private" )? "$abstract"? "$absorber" IDENTIFIER superAbsorbers? ( ";" | "{" ( AbsorberElement ( "|" AbsorberElement )* )? "}" ) superAbsorbers ::= "->" AbsorberOrTypeName ( "&" AbsorberOrTypeName )* AbsorberElement ::= IDENTIFIER ":" AbsorberOrTypeName "+"? expression ::= SelectiveExpression SelectiveExpression ::= SequentialExpression ( "|" SequentialExpression )* SequentialExpression ::= binaryExpression* binaryExpression ::= postfixExpression | OneOrMoreSeparatedExpression | ZeroOrMoreSeparatedExpression OneOrMoreSeparatedExpression ::= binaryExpression "++" postfixExpression ZeroOrMoreSeparatedExpression ::= binaryExpression "**" postfixExpression postfixExpression ::= StarExpression | PlusExpression | OptionalExpression1 | RestrictorExpression | prefixExpression PlusExpression ::= postfixExpression "+" RestrictorExpression ::= postfixExpression "/" TypeName StarExpression ::= StarExpressionConcrete EmptyExpression StarExpressionConcrete ::= postfixExpression "*" OptionalExpression1 ::= postfixExpression "?" EmptyExpression EmptyExpression ::= prefixExpression ::= LabeledExpression | primaryExpression LabeledExpression ::= ( IDENTIFIER | "$label" ) ":" prefixExpression primaryExpression ::= parenthesizedExpression | EmbedExpression | OptionalExpression2 | InlineExpression | IdentifierExpression | StringExpression EmbedExpression ::= "$embed" "(" expression ")" StringExpression ::= StringLiteral InlineExpression ::= TypeDefinition IdentifierExpression ::= SymbolName OptionalExpression2 ::= "[" expression "]" EmptyExpression parenthesizedExpression ::= "(" expression ")"