From 15b87ea17d96856d3ed9f2dbfbc80343b01b78df Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 20 Mar 2026 21:55:57 +0200 Subject: 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 --- README.md | 4 ++++ cmd/perc/main.go | 7 +++++++ internal/repl/repl.go | 10 +++++++++- perc_local | Bin 0 -> 3349320 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100755 perc_local 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 Binary files /dev/null and b/perc_local differ -- cgit v1.2.3