From 9cc95a0ecb08d7695d235b5c865cfa0ccf9e9aae Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 8 Jan 2015 18:23:32 +0100 Subject: Collet all return values in one place --- lexer.go | 30 ++++++++++++++++-------------- 1 file 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 { -- cgit v1.2.3