このドキュメントでは、¬<><∪∪の文法を 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 ")"