aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2019-07-17 13:07:51 +0200
committerDimitri Sokolyuk <demon@dim13.org>2019-07-17 13:07:51 +0200
commitb766d2119ae0503e402f305fdf034ccafa4fdae9 (patch)
treee55729b4e28bcf62dc3c13b9131e059b5c7269bc
parent237a7386150716889e2e4632bb3cbd614eb55d71 (diff)
cleanup
-rw-r--r--calc.go33
-rw-r--r--calc.y5
-rw-r--r--lexer.go1
-rw-r--r--main.go8
4 files changed, 22 insertions, 25 deletions
diff --git a/calc.go b/calc.go
index cf30fc6..672d063 100644
--- a/calc.go
+++ b/calc.go
@@ -59,16 +59,16 @@ const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
-//line calc.y:65
+//line calc.y:64
func init() {
rand.Seed(time.Now().UnixNano())
}
-func Parse(input string) (float64, bool, error) {
+func Parse(input string) (float64, error) {
l := lex(input)
yyParse(l)
- return l.result, l.ok, l.err
+ return l.result, l.err
}
//line yacctab:1
@@ -496,83 +496,82 @@ yydefault:
{
reg[last] = yyDollar[1].fval
yylex.(*yyLex).result = yyDollar[1].fval
- yylex.(*yyLex).ok = true
}
case 3:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:45
+//line calc.y:44
{
reg[yyDollar[1].sval] = yyDollar[3].fval
}
case 6:
yyDollar = yyS[yypt-1 : yypt+1]
-//line calc.y:51
+//line calc.y:50
{
yyVAL.fval = reg[yyDollar[1].sval]
}
case 7:
yyDollar = yyS[yypt-1 : yypt+1]
-//line calc.y:52
+//line calc.y:51
{
yyVAL.fval = reg[last]
}
case 8:
yyDollar = yyS[yypt-1 : yypt+1]
-//line calc.y:53
+//line calc.y:52
{
yyVAL.fval = rand.Float64()
}
case 9:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:54
+//line calc.y:53
{
yyVAL.fval = yyDollar[1].fval + yyDollar[3].fval
}
case 10:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:55
+//line calc.y:54
{
yyVAL.fval = yyDollar[1].fval - yyDollar[3].fval
}
case 11:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:56
+//line calc.y:55
{
yyVAL.fval = yyDollar[1].fval * yyDollar[3].fval
}
case 12:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:57
+//line calc.y:56
{
yyVAL.fval = yyDollar[1].fval / yyDollar[3].fval
}
case 13:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:58
+//line calc.y:57
{
yyVAL.fval = math.Mod(yyDollar[1].fval, yyDollar[3].fval)
}
case 14:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:59
+//line calc.y:58
{
yyVAL.fval = math.Pow(yyDollar[1].fval, yyDollar[3].fval)
}
case 15:
yyDollar = yyS[yypt-2 : yypt+1]
-//line calc.y:60
+//line calc.y:59
{
yyVAL.fval = -yyDollar[2].fval
}
case 16:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:61
+//line calc.y:60
{
yyVAL.fval = yyDollar[2].fval
}
case 17:
yyDollar = yyS[yypt-3 : yypt+1]
-//line calc.y:62
+//line calc.y:61
{
yyVAL.fval = math.Abs(yyDollar[2].fval)
}
diff --git a/calc.y b/calc.y
index ca8ceaa..9f81d6c 100644
--- a/calc.y
+++ b/calc.y
@@ -40,7 +40,6 @@ line
| exp {
reg[last] = $1
yylex.(*yyLex).result = $1
- yylex.(*yyLex).ok = true
}
| WORD '=' exp { reg[$1] = $3 }
| error
@@ -68,8 +67,8 @@ func init() {
rand.Seed(time.Now().UnixNano())
}
-func Parse(input string) (float64, bool, error) {
+func Parse(input string) (float64, error) {
l := lex(input)
yyParse(l)
- return l.result, l.ok, l.err
+ return l.result, l.err
}
diff --git a/lexer.go b/lexer.go
index 974831c..bbc5ef7 100644
--- a/lexer.go
+++ b/lexer.go
@@ -27,7 +27,6 @@ type yyLex struct {
width int
items chan item
result float64
- ok bool
err error
}
diff --git a/main.go b/main.go
index 35111e3..5d5e532 100644
--- a/main.go
+++ b/main.go
@@ -13,11 +13,11 @@ func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
line := scanner.Text()
- result, ok, err := Parse(line)
+ result, err := Parse(line)
if err != nil {
- fmt.Printf("error: %v\n\n", err)
- } else if ok {
- fmt.Printf("%v\n\n", result)
+ fmt.Println("error:", err)
+ continue
}
+ fmt.Println(result)
}
}