summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-20 21:55:57 +0200
committerPaul Buetow <paul@buetow.org>2026-03-20 21:55:57 +0200
commit15b87ea17d96856d3ed9f2dbfbc80343b01b78df (patch)
treecc5b1fbbb722ddbab49450d308d6945d99f3c01c
parent9a282b74a179517c009f855c14d3fa63ad805871 (diff)
cmd/perc/main.go: try RPN parsing before percentage calculation in command mode
- Bare expressions like '1 2 +' now work without 'calc' prefix - Assignment format 'name value =' requires 'calc' subcommand prefix
-rw-r--r--README.md4
-rw-r--r--cmd/perc/main.go7
-rw-r--r--internal/repl/repl.go10
-rwxr-xr-xperc_localbin0 -> 3349320 bytes
4 files changed, 20 insertions, 1 deletions
diff --git a/README.md b/README.md
index 157165d..cb7d9a5 100644
--- a/README.md
+++ b/README.md
@@ -99,6 +99,10 @@ perc calc x 5 = x x + # x + x = 10
perc calc pi 3.14159 = pi 2 * # 2 * π
# → 6.28318
+
+# Note: Variable assignment only works with calc/rpn subcommand:
+# perc calc x 5 = x x + (works)
+# perc x 5 = (won't work in bare mode - use "perc calc x 5 =")
```
#### Variable Management
diff --git a/cmd/perc/main.go b/cmd/perc/main.go
index d33593c..2cee268 100644
--- a/cmd/perc/main.go
+++ b/cmd/perc/main.go
@@ -56,6 +56,13 @@ func runCommand(args []string) (string, error) {
}
input := strings.Join(args[1:], " ")
+
+ // Try RPN parsing first (for bare RPN expressions like "3 4 +")
+ if rpnResult, rpnErr := runRPN(input); rpnErr == nil {
+ return rpnResult, nil
+ }
+
+ // Fall back to percentage calculation
result, err := calculator.Parse(input)
if err != nil {
return "", err
diff --git a/internal/repl/repl.go b/internal/repl/repl.go
index 79a94f4..ed39755 100644
--- a/internal/repl/repl.go
+++ b/internal/repl/repl.go
@@ -51,7 +51,15 @@ func executor(input string) {
return
}
- // Run the calculation
+ // Try RPN parsing first (for bare RPN expressions like "3 4 +")
+ rpnResult, rpnErr := runRPN(input)
+ if rpnErr == nil {
+ // Valid RPN expression - print result
+ fmt.Println(rpnResult)
+ return
+ }
+
+ // Run the percentage calculation
result, err := calculator.Parse(input)
if err != nil {
fmt.Printf("Error: %v\n", err)
diff --git a/perc_local b/perc_local
new file mode 100755
index 0000000..99ffa8e
--- /dev/null
+++ b/perc_local
Binary files differ