Skip to content

Latest commit

 

History

History
241 lines (208 loc) · 6.9 KB

File metadata and controls

241 lines (208 loc) · 6.9 KB
var input =
    """
    int a = 42;
    int b = 69;

    void main(){
        int x = 2;
        int y = a + b;
    }
    """;
/*
//VAR TABLE
// 0x00 - reserved
// 0x01 - global::a
// 0x02 - global::b

int a = 42;  // SETREG GP_I32_0 42          ;SET REGISTER 0 TO VALUE 42
             // MEM_WRITE GP_I32_0, 0x01    ;SET MEMORY ADDRESS 0x00 TO VALUE IN REGISTER 0

int b = 69;  // SETREG GP_I32_0 69          ;SET REGISTER 0 TO VALUE 42
             // MEM_WRITE GP_I32_0, 0x02    ;SET MEMORY ADDRESS 0x01 TO VALUE IN REGISTER 0

// VAR_TABLE_MAIN
// 0x03 - main::x
// 0x04 - main::z
// 0x05 - main::y
// 0x06 - main::w
//LBL FUNC_MAIN:
void main(){
    int x = 2;         // SETREG GP_I32_0 2
                       // MEM_WRITE GP_I32_0, 0x03
                       
                       
    int w = x;         // MEM_READ GP_I32_0 0x06
                       // MEM_WRITE GP_I32_0 0x03

    int z = a + b;     // MEM_READ GP_I32_0 0x01   ; read global::a into gp_i32_0
                       // MEM_READ GP_I32_1 0x02   ; read global::b into gp_i32_1
                       // ADD GP_I32_0 GP_I32_1    ; gp_i32_0 + gp_i32_1 =into=> gp_i32_0
                       // MEM_WRITE GP_I32_0 0x4   ; write addition result to main::z

    int y = x + z * b; // MEM_READ GP_I32_0 0x04   ; read main::z into reg 0
                       // MEM_READ GP_I32_1 0x02   ; read global::b into reg 1
                       // MUL GP_I32_0 GP_I32_1    ; reg0 = reg0 * reg1  ; z*b->reg0
                       // MEM_READ GP_I32_1 0x03   ; read main::x into reg 1
                       // ADD GP_I32_0 GP_I32_1    ; reg0 = reg0 + reg1 ; x+zb->reg0
                       // MEM_WRITE GP_I32_0 0x05  ; write main::y with math result
    //RET
}

//CALL FUNC_MAIN
//HALT

VARIABLE_DEC FUNCTION_DEC


┌───────┬──────────────┬────────────────
│ Words │ Tokens       │Tree?                
├───────┼──────────────┼────────────────
│ int   │ Type         │ VAR_DEC     NAME:c
│ c     │ VarName      │ │-TYPE: int
│ ;     │ EndLine      │      
│ int   │ Type         │ VAR_DEC     NAME:a
│ a     │ VarName      │ │-TYPE: int  
│ =     │ Assignment   │ │ VAR_ASSIGNMENT    
│ 42    │ TypedValue   │   │-TYPED_VALUE            
│ ;     │ EndLine      │                
│ int   │ Type         │ VAR_DEC    NAME:b   
│ b     │ VarName      │ │-TYPE: int
│ =     │ Assignment   │ │ VAR_ASSIGNMENT            
│ 69    │ TypedValue   │   |-TYPED_VALUE             
│ ;     │ EndLine      │                
│ fn    │ Function     │ FUNC_DEC NAME:main               
│ main  │ VarName      │ │-ARGS: void  
│ (     │ OpenParen    │ |-RET : void
│ )     │ CloseParen   │ │ VAR_DEC  NAME:main::x        
│ :     │ OfType       │ │ │-TYPE:int                  
│ void  │ Type         │ │ │-VARIABLE_ASSIGNMENT       
│ {     │ OpenBracket  │ │   |-TYPED_VALUE             
│ int   │ Type         │ │ VAR_DEC NAME:main::y
│ x     │ VarName      │ │ │-TYPE: int  
│ =     │ Assignment   │ │ │-VARIABLE_ASSIGNMENT
│ 2     │ TypedValue   │   | |-EXPR
│ ;     │ EndLine      │     │ │ SUM
│ int   │ Type         │       │- A
│ y     │ VarName      │       │- B
│ =     │ Assignment   │
│ a     │ VarName      │
│ +     │ Add          │
│ b     │ VarName      │
│ ;     │ EndLine      │
│ }     │ CloseBracket │ 
└───────┴──────────────┴
┌───────┬──────────────┐
│ Words │ Tokens       │
├───────┼──────────────┤
PROGRAM ROOT:
    VAR DEC:
        │ int   │ Type         │
        │ c     │ VarName      │
    │ ;     │ EndLine      │
    VAR DEC:
        │ int   │ Type         │
        │ a     │ VarName      │
    │ ;     │ EndLine      │
    VAR DEC:
        │ int   │ Type         │
        │ b     │ VarName      │
    │ ;     │ EndLine      │
    VAR ASSIGNMENT:
        │ a     │ VarName      │
        │ =     │ Assignment   │
        EXPRESSION:
            │ 42    │ TypedValue   │
    │ ;     │ EndLine      │
    VAR ASSIGNMENT:
        │ b     │ VarName      │
        │ =     │ Assignment   │
        EXPRESSION:
            │ 69    │ TypedValue   │
    │ ;     │ EndLine      │
    FUNC DEC:
        │ fn    │ Function     │
        │ main  │ VarName      │
        │ (     │ OpenParen    │
        │ )     │ CloseParen   │
        │ :     │ OfType       │
        │ void  │ Type         │
        BODY:
        │ {     │ OpenBracket  │
            VAR DEC:
                │ int   │ Type         │
                │ x     │ VarName      │
            │ ;     │ EndLine      │
            VAR DEC:
                │ int   │ Type         │
                │ y     │ VarName      │
            │ ;     │ EndLine      │
            VAR ASSIGNMENT:
                │ x     │ VarName      │
                │ =     │ Assignment   │
                EXPRESSION:
                    │ 2     │ TypedValue   │
            │ ;     │ EndLine      │
            VAR ASSIGNMENT:
                │ y     │ VarName      │
                │ =     │ Assignment   │
                EXPRESSION:
                    │ a     │ VarName      │
                    │ +     │ Add          │
                    │ b     │ VarName      │
            │ ;     │ EndLine      │
        │ }     │ CloseBracket │
└───────┴──────────────┘

.:: = happy puppy syntax

"""
//var table
// global::a - 0x00
int globalVarA = 42;


//global::fn_main::c - 0x01
fn main (  ) : void
{
    int lv_demo = globalVarA;
}

fn other_func():void{int c=0;}

main();
""";
VT:
x : 0
y : 1

int x = 0;  // SETREG GP_I32_0 0
            // MEM_WRITE GP_I32_0, 0x00


int y = 1;  // SETREG GP_I32_0 0x01
            // MEM_WRITE GP_I32_0, 0x01

if ( 
    x > y  // COMP X Y 
           // JMP_GTR if_0_t
           // JMP if_0_f 
    ) 
{
    // lbl if_0_t
    int xGy = 1; 
}
// lbl if_0_f
VT:
x : 0
y : 1
z : 2
m : 3

int x = 0;  // SETREG GP_I32_0 0
            // MEM_WRITE GP_I32_0, 0x00


int y = 1;  // SETREG GP_I32_0 0x01
            // MEM_WRITE GP_I32_0, 0x01

int z = 2;
int m = 3;

if ( 
    x > y  // COMP X Y 
           // JMP_LESS if_0_f -- condition false bail
           
     &&
           
     z == m // COMP Z M
            // JMP_NEQ 
    ) 
{
    // lbl if_0_t
    int xGy = 1; 
}
// lbl if_0_f