Compiler
Expression ⇐ ExpressionVariable | ConditionExpr | WhileDeclaration | PrintDeclaration ;
ExpressionVariable ⇐ (VariableDeclaration | VariableInitialization) , ENDPOINT ;
ConditionExpr ⇐ IfDeclaration | IfDeclaration , ElseDeclaration;
WhileDeclaration ⇐ TSUKUYOMI , LPAREN , MultipleConditionParam , RPAREN , LBRACK , Expression , RBRACK ;
PrintDeclaration ⇐ SHARINGAN , LPAREN , Values , RPAREN , ENDPOINT ;
VariableDeclaration ⇐ VariableType , IDENTIFIER ;
VariableType ⇐ RASENGAN | RAIKIRI | ZETSU | KUCHIYOSE ;
VariableInitialization ⇐ [VariableType] , IDENTIFIER , HAKU , Values;
IfDeclaration ⇐ NINJUTSU , LPAREN , MultipleConditionParam , RPAREN , LBRACK , Expression , RBRACK; Num ⇐ INT | FLOAT ;
ElseDeclaration ⇐ TAIJUTSU, LBRACK , Expression , RBRACK;
MultipleConditionParam ⇐ {[ConditionParam , Operator]} , ConditionParam ;
ConditionParam ⇐ (Values , Comparators , Value) ;
Comparators ⇐ KIRIGAKURE ;
Operator ⇐ KUMOGAKURE , AMEGAKURE ;
Values ⇐ Num | STRING | BOOLEAN | IDENTIFIER | NumOperation | StrOperation ;
Num : INT | FLOAT
NumOperation ⇐ (Num | IDENTIFIER) , Operation , (Num | IDENTIFIER) , [{Operation , (Num | IDENTIFIER)}] ;
Operation ⇐ FUUMASHURIKEN | KUNAI | SHURIKEN | KATANA ;
StrOperation ⇐ STRING , FUUMASHURIKEN , STRING , [{FUUMASHURIKEN , STRING}] ;