aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-01-08 18:23:32 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-01-08 18:23:32 +0100
commit9cc95a0ecb08d7695d235b5c865cfa0ccf9e9aae (patch)
treee2f85bc05791fbc3268be54d04285c5b9b5cad10
parent40aa6de8a706ac88a7451dad0058c59f26bd9a7f (diff)
Collet all return values in one place
-rw-r--r--lexer.go30
1 files changed, 16 insertions, 14 deletions
diff --git a/lexer.go b/lexer.go
index b059625..8336947 100644
--- a/lexer.go
+++ b/lexer.go
@@ -15,13 +15,9 @@ const (
upper
quoted
char
- sum
- sub
- mul
- div
)
-var charmap = map[rune]int {
+var charmap = map[rune]int{
'+': SUM,
'-': SUB,
'*': MUL,
@@ -32,6 +28,14 @@ var charmap = map[rune]int {
',': COM,
}
+var typemap = map[int]int{
+ digit: NUMBER,
+ upper: VREG,
+ lower: DREG,
+ quoted: STRING,
+ char: eof,
+}
+
type item struct {
typ int
val string
@@ -49,8 +53,10 @@ func (y *yyLex) Error(s string) {
log.Println(s)
}
-func (y *yyLex) Lex(lval *yySymType) int {
+func (y *yyLex) Lex(lval *yySymType) (ret int) {
item := <-y.items
+ ret = typemap[item.typ]
+
switch item.typ {
case digit:
n, err := strconv.ParseFloat(item.val, 64)
@@ -58,25 +64,21 @@ func (y *yyLex) Lex(lval *yySymType) int {
log.Println(err)
}
lval.dval = Number(n)
- return NUMBER
case upper:
lval.rval = rune(item.val[0])
- return VREG
case lower:
lval.rval = rune(item.val[0])
- return DREG
case quoted:
- lval.sval = item.val[1:len(item.val)-1]
- return STRING
+ lval.sval = item.val[1 : len(item.val)-1]
case char:
c := rune(item.val[0])
if ch, ok := charmap[c]; ok {
- return ch
+ ret = ch
} else {
- return int(c)
+ ret = int(c)
}
}
- return eof
+ return ret
}
func lex(input string) *yyLex {