From: Brendan Hansen Date: Sun, 16 Dec 2018 07:49:54 +0000 (-0600) Subject: parens can be used for precedence X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=b6203b8a73c5e42c534cca709f9bb6a95d3652d5;p=light.git parens can be used for precedence --- diff --git a/christmas_proj b/christmas_proj index 98bedaa..9bafaa9 100755 Binary files a/christmas_proj and b/christmas_proj differ diff --git a/data/progs/avg.lgt b/data/progs/avg.lgt index e6ee493..db38f06 100644 --- a/data/progs/avg.lgt +++ b/data/progs/avg.lgt @@ -1,6 +1,6 @@ #FLOOD_WITH_RANDOM { - $m6 = -1 + 256 * 256 * 256 + $m6 = (256 * 256 * 256) - 1 $m7 = !GET_WIDTH() $m8 = !GET_HEIGHT() diff --git a/data/progs/gol.lgt b/data/progs/gol.lgt index 39e70ba..f6dd1a4 100644 --- a/data/progs/gol.lgt +++ b/data/progs/gol.lgt @@ -50,9 +50,7 @@ while $y < !BOARD_HEIGHT() { $m2 = !get_a() == !CELL_ALIVE() if $m2 { - $m3 = $m1 < 2 - $m3 = $m3 + $m1 > 3 - if $m3 { + if ($m1 < 2) + ($m1 > 3) { !set_r(!CELL_DEAD()) } } else { @@ -83,7 +81,7 @@ while 1 { $m7 = $m7 - 1 if $m7 <= 0 { - $m7 = 30 + $m7 = 1 $y = 0 while $y < !BOARD_HEIGHT() { diff --git a/data/progs/maze.lgt b/data/progs/maze.lgt index 34603c2..237f0c2 100644 --- a/data/progs/maze.lgt +++ b/data/progs/maze.lgt @@ -1,5 +1,5 @@ #push_pos { - $m1 = $x + $y * 256 * 256 + $m1 = ($y * 256 * 256) + $x !step_to_linear(0) !step_to_linear(!get_col() + 1) @@ -9,8 +9,8 @@ !step_to_linear(0) !set_col(!get_col() + 1) - $x = $m1 % 256 * 256 - $y = $m1 / 256 * 256 + $x = $m1 % (256 * 256) + $y = $m1 / (256 * 256) } #pop_pos { @@ -21,8 +21,8 @@ !step_to_linear(0) !set_col(!get_col() - 1) - $x = $m1 % 256 * 256 - $y = $m1 / 256 * 256 + $x = $m1 % (256 * 256) + $y = $m1 / (256 * 256) } #get_stack_height { @@ -67,15 +67,13 @@ while !get_stack_height() > 0 { $y = $y - 2 if $m1 { - $m8 = 100 + $m8 = 1 while $m8 { //Random direction $m7 = !random(4) - $m8 = $m8 - 1 // dx and dy - $m5 = 0 - $m6 = 0 + $m5 = $m6 = 0 if $m7 == 0 { $m6 = -2 @@ -117,5 +115,3 @@ while !get_stack_height() > 0 { } !render() } - -!say(8008135) diff --git a/src/lang/lexer.nim b/src/lang/lexer.nim index aa27709..fe5bc86 100644 --- a/src/lang/lexer.nim +++ b/src/lang/lexer.nim @@ -20,9 +20,9 @@ iterator Generate_tokens*(source: string): LightToken = if ch == '}': yield LightToken(kind: ltBlockEnd) if ch == '(': - yield LightToken(kind: ltParamStart) + yield LightToken(kind: ltLeftParen) if ch == ')': - yield LightToken(kind: ltParamEnd) + yield LightToken(kind: ltRightParen) if ch == ';': yield LightToken(kind: ltExprDelim) continue diff --git a/src/lang/parser.nim b/src/lang/parser.nim index c28d4e1..932e4b9 100644 --- a/src/lang/parser.nim +++ b/src/lang/parser.nim @@ -46,11 +46,11 @@ func NextExpr(parser: LightParser, prev: LightExpr, stop_at: set[LightTokenType] of ltNum: LightExpr(kind: leNumLit, value: curr.value) of ltVar: LightExpr(kind: leVar, var_name: curr.var_name) of ltFunc: - if parser.tokens.Current.kind != ltParamStart: + if parser.tokens.Current.kind != ltLeftParen: raise newException(ValueError, "Expected parameter list after function call") parser.tokens.Step() - let params = Parse_block(parser.tokens, ltParamDelim, ltParamEnd) + let params = Parse_block(parser.tokens, ltParamDelim, ltRightParen) LightExpr( kind: leFuncCall, @@ -69,6 +69,11 @@ func NextExpr(parser: LightParser, prev: LightExpr, stop_at: set[LightTokenType] right: next, operation: curr.operation ) + + elif curr.kind == ltLeftParen: + let next = parser.NextExpr(LightExpr(kind: leNull), {ltRightParen}) + parser.tokens.Step() + return parser.NextExpr(next, stop_at) elif curr.kind == ltEq: if prev.kind != leVar: diff --git a/src/lang/types/tokens.nim b/src/lang/types/tokens.nim index 8247db8..306f235 100644 --- a/src/lang/types/tokens.nim +++ b/src/lang/types/tokens.nim @@ -5,11 +5,11 @@ type ltNull, ltVar, ltNum, ltExprDelim, + ltLeftParen, ltRightParen, ltIf, ltElse, ltWhile, ltBlockStart, ltBlockEnd, ltBreak, ltFunc, - ltParamStart, ltParamEnd, ltParamDelim, ltFuncDef, ltOp, ltEq @@ -48,14 +48,14 @@ proc `$`*(token: LightToken): string = of ltEq: "EqualsToken" of ltNum: "NumberToken[" & $token.value & "]" of ltExprDelim: "ExprDelimToken" + of ltLeftParen: "LeftParenToken" + of ltRightParen: "RightParenToken" of ltIf: "IfToken" of ltWhile: "WhileToken" of ltBreak: "BreakToken" of ltBlockStart: "BlockStartToken" of ltBlockEnd: "BlockEndToken" of ltFunc: "FunctionToken[" & token.func_name & "]" - of ltParamStart: "ParamStartToken" - of ltParamEnd: "ParamEndToken" of ltParamDelim: "ParamDelimToken" of ltFuncDef: "FuncDefToken[" & token.func_name & "]" of ltOp: "OpeartionToken[" & $token.operation & "]"