Skip to content

Commit

Permalink
finished some todo item and fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
zuluoaaa committed Mar 12, 2020
1 parent c95973e commit 4fcef9d
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 13 deletions.
3 changes: 2 additions & 1 deletion src/core/data.js
Expand Up @@ -30,5 +30,6 @@ module.exports = {
addVar,
assignVal,
findVar,
deleteVar
deleteVar,
gVarMap
}
34 changes: 32 additions & 2 deletions src/core/genAST.js
Expand Up @@ -21,8 +21,28 @@ function primary() {
return asTnode;
}

function getIfAST(astNode) {
let state = genAST(astNode.left);
if(state){
genAST(astNode.mid);
}else{
if(astNode.right){
genAST(astNode.right);
}
}
}

function genAST(astNode,result=null){

switch (astNode.op) {
case ASTNodeTypes.T_IF:
return getIfAST(astNode);
case ASTNodeTypes.T_GLUE:
genAST(astNode.left);
genAST(astNode.right);
return;
}

let leftResult,rightResult;
if(astNode.left){
leftResult = genAST(astNode.left);
Expand All @@ -49,12 +69,22 @@ function genAST(astNode,result=null){
return findVar(astNode.value);
case ASTNodeTypes.T_LVALUE:
return assignVal(astNode.value,result);

case ASTNodeTypes.T_GE:
return leftResult >= rightResult;
case ASTNodeTypes.T_GT:
return leftResult > rightResult;
case ASTNodeTypes.T_LE:
return leftResult <= rightResult;
case ASTNodeTypes.T_LT:
return leftResult < rightResult;
case ASTNodeTypes.T_EQ:
return leftResult === rightResult;
case ASTNodeTypes.T_NEQ:
return leftResult !== rightResult;

default:
errPrint(`unknown ASTNode op : ${astNode.op}`);
}

}


Expand Down
3 changes: 2 additions & 1 deletion src/core/parse.js
Expand Up @@ -16,8 +16,9 @@ const {ASTNode} = require("./ASTnode");
function varDeclaration() {
let {token} = gData;
match(tokenTypes.T_VAR,"var");
if(match(tokenTypes.T_IDENT,"identifier")){
if(token.type === tokenTypes.T_IDENT){
addVar(token.value);
scan();
}else {
errPrint(`unknown error : token type: ${token.type}`);
}
Expand Down
9 changes: 5 additions & 4 deletions src/index.js
Expand Up @@ -2,17 +2,18 @@ const {init} = require("./init/init")
const {scan} = require("./core/scanner");
const {statement} = require("./core/parse");
const {genAST} = require("./core/genAST");

const {gVarMap} = require("./core/data");
function main(){

console.log("start compiling");

init();
scan();
let astNodeTree = statement();
console.log(JSON.stringify(astNodeTree))
let result = genAST(astNodeTree);
console.log(result);
genAST(astNodeTree);

console.log(gVarMap);

console.log("compiled finished");
}

Expand Down
9 changes: 4 additions & 5 deletions test/test3.js
@@ -1,13 +1,12 @@
let a;
let b;
let c;
let ccc;
a = 1+7*6;
b = 8*3*2;

if(a > b){
c = a;
ccc = a;
}else {
c = b;
ccc = b;
}
c = c + 7;

ccc = ccc + 7;

0 comments on commit 4fcef9d

Please sign in to comment.