parens can be used for precedence
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sun, 16 Dec 2018 07:49:54 +0000 (01:49 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sun, 16 Dec 2018 07:49:54 +0000 (01:49 -0600)
christmas_proj
data/progs/avg.lgt
data/progs/gol.lgt
data/progs/maze.lgt
src/lang/lexer.nim
src/lang/parser.nim
src/lang/types/tokens.nim

index 98bedaa7edbf2d80f1a83f6d0d5b28112d2c9391..9bafaa91535aad594ce6da3293b3b8c480304297 100755 (executable)
Binary files a/christmas_proj and b/christmas_proj differ
index e6ee4936efa55302c92f37a6a8ba028191179810..db38f0601e220ce73c4d4341df0e9669e38fda25 100644 (file)
@@ -1,6 +1,6 @@
 
 #FLOOD_WITH_RANDOM {
-       $m6 = -1 + 256 * 256 * 256
+       $m6 = (256 * 256 * 256) - 1
        $m7 = !GET_WIDTH()
        $m8 = !GET_HEIGHT()
 
index 39e70bae852b04a2e9a1e4653266b8f6b2e83891..f6dd1a46b3f159c8a8d40c4910704d2c7219c8fb 100644 (file)
@@ -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() {
index 34603c2258c4e6bc4295af672b86f913b4b5b517..237f0c2523fedb7acac8a872605a0c60cce75e80 100644 (file)
@@ -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)
index aa277092edfda88a06b535fefda5a62303a26af6..fe5bc86646216231230299b88e1299e85b6c4ee4 100644 (file)
@@ -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
index c28d4e14c6141ba9b183fe277f1f9c4d4f712ea8..932e4b9afbe38ff579328ecac062779ee97a8053 100644 (file)
@@ -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:
index 8247db8a037449ef62aa9cbbe0bc9d7e6cec9b34..306f2350d461fd9c1f2b300033dec2a8c077f580 100644 (file)
@@ -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 & "]"