added structs and enums
authorOscar josue Rodriguez Blanco <josuer08@gmail.com>
Tue, 3 Jan 2023 04:23:51 +0000 (04:23 +0000)
committerOscar josue Rodriguez Blanco <josuer08@gmail.com>
Tue, 3 Jan 2023 04:23:51 +0000 (04:23 +0000)
compiler.go

index 84e3f5400ca3bca4e17f199724f270d5e5c31e5e..1585cb3e53c5342dd0e3b4d158e639dfa9fd110c 100644 (file)
@@ -2,6 +2,44 @@ package main
 
 import "fmt"
 
+type op int
+
+const (
+   imm op = iota
+   arg
+   plus
+   min
+   mul
+   div
+)
+
+type AST struct {
+   Op op
+   A  *AST
+   B  *AST
+   N  int
+}
+
+
+
 func main() {
-    fmt.Println("Hello, world.")
+    //a := &AST{Op: imm, N: 5}
+    //b := &AST{Op: plus, A: a, B: &AST{Op: arg, N: 0}}
+    input := "[ a b ] a*a + b*b"
+    value := []rune(input)
+    for index, char := range value {
+        //make a stack and start pusing the [] to identify the start of a function and its end
+        //also check on a *-+/ for starting new operations with the last value and the next
+        //or can be a ( which pushes last value to a stack and picks up a new "first value" for this operation and ) indicating that order of operation is finish and
+        //you should pull again the last value that you pushed
+
+        //found [ start registering args to a map
+        // variable inside [] add to map of variables
+        // found ] stop registering new variables for the map
+        // found variable put to stack
+        // found inmmediate number put to stack
+        // found operation activate operation mode and upon next variable or inmediate add to the structure
+        // found ( can push another variable to stack and increment the indent counter
+        // found ) if no operation mode (that would be an error) then add the operations to the structure and decrement the indnet counter
+    }
 }