このドキュメントでは、¬<><∪∪の文法を Input Specification よりも厳密に定義します。ゴール記号は Root です。この文法は、¬<><∪∪のソースファイルで使用されているものを基にしているため、終端・非終端記号の名前は Input Specification などで使用されているものとは異なります。? は省略可能、* は0回以上の繰り返しを表します。
StringLiteral ::= <Javaの文字列リテラル> CharacterLiteral ::= <Javaの文字リテラル> IDENTIFIER ::= <Javaの識別子および予約語で、$で始まらないもの>
加えて、以下においてJavaの文字列リテラルの形式で表現される文字列も終端記号となります。また、次の文字列も終端記号となります。"||" "&&" "--" "!!" "**" "++" "??"
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
SubtokenDefinition ::= "$subtoken" IDENTIFIER "=" tokenExpression ";" TokenDefinition ::= "$token" IDENTIFIER "=" tokenExpression ";" WhiteTokenDefinition ::= "$white" "$token" IDENTIFIER "=" tokenExpression ";" TokenReservation ::= "$token" IDENTIFIER ";" WhiteTokenReservation ::= "$white" "$token" IDENTIFIER ";" tokenExpression ::= SelectiveTokenExpression SelectiveTokenExpression ::= termTokenExpression ( "|" termTokenExpression )* termTokenExpression ::= SequentialTokenExpression | IntersectionTokenExpression | DifferenceTokenExpression IntersectionTokenExpression ::= termTokenExpression "&" SequentialTokenExpression DifferenceTokenExpression ::= termTokenExpression "-" DifferenceTokenExpressionRHS DifferenceTokenExpressionRHS ::= SequentialTokenExpression SequentialTokenExpression ::= prefixTokenExpression* prefixTokenExpression ::= postfixTokenExpression | ComplementaryTokenExpression ComplementaryTokenExpression ::= "!" prefixTokenExpression postfixTokenExpression ::= StarTokenExpression | PlusTokenExpression | OptionalTokenExpression1 | primaryTokenExpression PlusTokenExpression ::= postfixTokenExpression "+" StarTokenExpression ::= StarTokenExpressionConcrete EmptyTokenExpression StarTokenExpressionConcrete ::= 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 ";" expression ::= SelectiveExpression SelectiveExpression ::= SequentialExpression ( "|" SequentialExpression )* SequentialExpression ::= 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 | StringExpression | InlineExpression | IdentifierExpression | OptionalExpression2 EmbedExpression ::= "$embed" "(" expression ")" StringExpression ::= StringLiteral InlineExpression ::= TypeDefinition IdentifierExpression ::= SymbolName OptionalExpression2 ::= "[" expression "]" EmptyExpression parenthesizedExpression ::= "(" expression ")"