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