Skip to content

Commit

Permalink
parser(fix): if statements
Browse files Browse the repository at this point in the history
  • Loading branch information
chanbengz committed Dec 4, 2024
1 parent 16c75e3 commit fd7cefb
Showing 1 changed file with 49 additions and 30 deletions.
79 changes: 49 additions & 30 deletions src/parser/src/grammar.lalrpop
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,55 @@ pub Body: tree::Body = {
}

Expr: tree::Expr = {
<expr:IfExpr> => expr,
<expr:OpenExpr> => expr,
<expr:CloseExpr> => expr,
}

OpenExpr: tree::Expr = {
"if" "(" <cond:CondExpr> ")" <body:Expr> => {
let body = match body {
tree::Expr::Body(body) => body,
_ => tree::Body::Body(vec![body])
};
tree::Expr::If(tree::If::IfExpr(cond, body))
},
"if" "(" <cond:CondExpr> ")" <body:CloseExpr> "else" <body_2:OpenExpr> => {
let body = match body {
tree::Expr::Body(body) => body,
_ => tree::Body::Body(vec![body])
};
let body_2 = match body_2 {
tree::Expr::Body(body) => body,
_ => tree::Body::Body(vec![body_2])
};
tree::Expr::If(
tree::If::IfElseExpr(
cond,
body,
body_2
)
)
},
}

CloseExpr: tree::Expr = {
"if" "(" <cond:CondExpr> ")" <body:CloseExpr> "else" <body_2:CloseExpr> => {
let body = match body {
tree::Expr::Body(body) => body,
_ => tree::Body::Body(vec![body])
};
let body_2 = match body_2 {
tree::Expr::Body(body) => body,
_ => tree::Body::Body(vec![body_2])
};
tree::Expr::If(
tree::If::IfElseExpr(
cond,
body,
body_2
)
)
},
<expr:WhileExpr> => expr,
<expr:ForExpr> => expr,
<expr:FuncCall> => expr,
Expand Down Expand Up @@ -196,35 +244,6 @@ Expr: tree::Expr = {
}
}

IfExpr: tree::Expr = {
"if" "(" <cond:CondExpr> ")" <body:Expr> => {
match body {
tree::Expr::Body(body) => {
tree::Expr::If(
tree::If::IfExpr(
cond,
body
)
)
},
_ => {
tree::Expr::If(
tree::If::IfExpr(cond, tree::Body::Body(vec![body]))
)
}
}
},
"if" "(" <cond:CondExpr> ")" "{" <body:Body> "}" "else" "{" <body_2:Body> "}" => {
tree::Expr::If(
tree::If::IfElseExpr(
cond,
body,
body_2
)
)
}
}

WhileExpr: tree::Expr = {
"while" "(" <cond:CondExpr> ")" "{" <body:Body> "}" => {
tree::Expr::Loop(
Expand Down

0 comments on commit fd7cefb

Please sign in to comment.