dlang 0.1.3

Programing language from scratch
Documentation
#BNF
##RULES
    RootNode(aka Program) = Statement | Statement* ;

    Statement = Let_Statement | Expression_Statement | Block_Statement | Return_Statement ;

      Let_Statement = Token_let Identifier Token_Assignment Expression ;
        ex) let foo = 20;


      Expression_Statement = Expression (;) ;
        ex) 20; , 20 + 30; , call_fn(foo)


      Block_Statement = { Statement* } ;


      Return_Statement = return (Expression) ;


    Expression = Identifier_Expression | Infix_Expression | Prefix_Expression 
                                       | Call_Expression | Index_Expression 
                                       | If_Expression | Literal_Expression  ;


      Identifier_Expression = Identifier ;


      Infix_Expression = Expression Infix_Operator Expression
        ex) 1 + 2, a - b, big >= small, ... 


      Prefix_Expression = Prefix_Operator Expression
        ex) -100, !true, !false

      
      Call_Expression = Identifier ( Expression* ) | Function_Literal ( Expression* ) 
        ex) some_fn(arg), another() , fn { return foo; }

      If_Expression = if ( Expression ) Block_Statement ( else Block_Statement )
        ex) if (flag == true) { return foo }
        ex) if (flag == true) { foo } else { return 20; }


      Index_Expression = Identifier [ Expression ] | Array_Literal  [ Expression ]


      Literal_Expression = Integer_Literal | Boolean_Literal | String_Literal | Function_Literal | Array_Literal

      
        Integer_Literal = (-) [ 0..=9 ] * ;


        String_Literal = "( [a-z|A-Z|0-9] * )" ;


        Boolean_Literal = true | false ;


        Function_Literal = fn (Identifier) ( (Identifier*) ) Block_Statement ;


        Array_Literal = [Expression (,Expression)* ]