remove ScalarExpr
							parent
							
								
									9b37fc7310
								
							
						
					
					
						commit
						6363118aa9
					
				|  | @ -10,11 +10,11 @@ import ( | ||||||
| 
 | 
 | ||||||
| struct Foo {} | struct Foo {} | ||||||
| 
 | 
 | ||||||
| pub type Expr = Foo | IfExpr | BinaryExpr | ScalarExpr | UnaryExpr | | pub type Expr = Foo | IfExpr | BinaryExpr | UnaryExpr | | ||||||
| 	StringLiteral  | IntegerExpr | 	StringLiteral  | IntegerLiteral | ||||||
| pub type Stmt = Foo | VarDecl | pub type Stmt = Foo | VarDecl | ||||||
| 
 | 
 | ||||||
| pub struct IntegerExpr { | pub struct IntegerLiteral { | ||||||
| pub: | pub: | ||||||
| 	val int | 	val int | ||||||
| } | } | ||||||
|  | @ -66,16 +66,6 @@ pub: | ||||||
| 	right Expr | 	right Expr | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct ScalarExpr { |  | ||||||
| pub: |  | ||||||
| 	token token.Token |  | ||||||
| 	// op    BinaryOp
 |  | ||||||
| 	// op    token.Token
 |  | ||||||
| 	typ   token.Token |  | ||||||
| 	val   string |  | ||||||
| 	left  Expr |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| pub struct UnaryExpr { | pub struct UnaryExpr { | ||||||
| pub: | pub: | ||||||
| 	// token token.Token
 | 	// token token.Token
 | ||||||
|  | @ -102,9 +92,9 @@ pub fn (x Expr) str() string { | ||||||
| 		BinaryExpr { | 		BinaryExpr { | ||||||
| 			return '(${it.left.str()}$it.op.str()${it.right.str()})' | 			return '(${it.left.str()}$it.op.str()${it.right.str()})' | ||||||
| 		} | 		} | ||||||
| 		ScalarExpr { | 		//ScalarExpr {
 | ||||||
| 			return '${it.left.str()}$it.val' | 			//return '${it.left.str()}$it.val'
 | ||||||
| 		} | 		//}
 | ||||||
| 		UnaryExpr { | 		UnaryExpr { | ||||||
| 			return '${it.left.str()}$it.op.str()' | 			return '${it.left.str()}$it.op.str()' | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -44,15 +44,10 @@ const ( | ||||||
| fn (g mut Gen) expr(node ast.Expr) Type { | fn (g mut Gen) expr(node ast.Expr) Type { | ||||||
| 	//println('cgen expr()')
 | 	//println('cgen expr()')
 | ||||||
| 	match node { | 	match node { | ||||||
| 		ast.IntegerExpr { | 		ast.IntegerLiteral { | ||||||
| 			g.write(it.val.str()) | 			g.write(it.val.str()) | ||||||
| 			return int_type | 			return int_type | ||||||
| 		} | 		} | ||||||
| 		ast.ScalarExpr { |  | ||||||
| 			g.expr(it.left) |  | ||||||
| 			g.write(' $it.val ') |  | ||||||
| 
 |  | ||||||
| 		} |  | ||||||
| 		ast.UnaryExpr { | 		ast.UnaryExpr { | ||||||
| 			g.expr(it.left) | 			g.expr(it.left) | ||||||
| 			g.write(' $it.op ') | 			g.write(' $it.op ') | ||||||
|  |  | ||||||
|  | @ -64,10 +64,18 @@ pub fn (p mut Parser) expr(rbp int) ast.Expr { | ||||||
| 		else { | 		else { | ||||||
| 			// TODO: fix bug. note odd conditon instead of else if (same below)
 | 			// TODO: fix bug. note odd conditon instead of else if (same below)
 | ||||||
| 			if tok.is_scalar() { | 			if tok.is_scalar() { | ||||||
| 				node = ast.ScalarExpr{ | 				if tok == .str { | ||||||
|  | 					node = ast.StringLiteral { | ||||||
| 						val: lit | 						val: lit | ||||||
| 					typ: tok |  | ||||||
| 					} | 					} | ||||||
|  | 				}	if tok == .number { | ||||||
|  | 					node = ast.IntegerLiteral { | ||||||
|  | 						val: lit.int() | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				//else {
 | ||||||
|  | 					//verror('bad scalar token')
 | ||||||
|  | 				//}
 | ||||||
| 			} | 			} | ||||||
| 			if !tok.is_scalar() && tok.is_unary() { | 			if !tok.is_scalar() && tok.is_unary() { | ||||||
| 				node = ast.UnaryExpr{ | 				node = ast.UnaryExpr{ | ||||||
|  | @ -123,3 +131,8 @@ fn (p mut Parser) stmt() ast.Stmt { | ||||||
| 
 | 
 | ||||||
| 	return ast.VarDecl{} | 	return ast.VarDecl{} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | fn verror(s string) { | ||||||
|  | 	println(s) | ||||||
|  | 	exit(1) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -40,7 +40,7 @@ fn test_parser() { | ||||||
| fn test_cgen() { | fn test_cgen() { | ||||||
| 	//expr := parse_expr('3 + 7 * 2')
 | 	//expr := parse_expr('3 + 7 * 2')
 | ||||||
| 	//expr2 := parse_stmt('a := 3 + "f"')
 | 	//expr2 := parse_stmt('a := 3 + "f"')
 | ||||||
| 	expr2 := parse_expr('2 +3 ')//"helo"')
 | 	expr2 := parse_expr('2 + "helo"') | ||||||
| 	program := ast.Program{ | 	program := ast.Program{ | ||||||
| 		exprs: [ | 		exprs: [ | ||||||
| 			expr2, | 			expr2, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue