1- package parser
1+ package lexer
22
33import (
44 "bufio"
55 "bytes"
66 "io"
77)
88
9- type Token int
9+ // type Token int
1010
1111// 词法分析中的初步结果(部分内容可以经过tokenize来形成语义更加明确的token)
1212const (
1313 // 特殊标记
14- ILLEGAL Token = iota
15- EOF
14+ T_ILLEGAL Token = iota
15+ T_EOF
1616 WS // 空白字符
1717 // 常规类型数据
18- IDENT // ID,此时我们并不区分关键词,而是归类到同一类
19- INTEGER // 整数
20- FLOAT // 浮点数
21- STRING // 字符串
18+ T_IDENT // ID,此时我们并不区分关键词,而是归类到同一类
19+ T_INTEGER // 整数
20+ T_FLOAT // 浮点数
21+ T_STRING // 字符串
2222 // 其他标记
23- ASTERISK // *
24- COMMA // ,
25- LEFT_PARENTHESIS // (
26- RIGHT_PARENTHESIS // )
27- SEMICOLON // ;
28- EQUAL // =
29- ANGLE_LEFT // <
30- ANGLE_LEFT_EQUAL //<=
31- ANGLE_RIGHT_EQUAL //>=
32- ANGLE_RIGHT // >
33- NOT_EQUAL // <> or !=
34- POINT // .
23+ T_ASTERISK // *
24+ T_COMMA // ,
25+ T_LEFT_PARENTHESIS // (
26+ T_RIGHT_PARENTHESIS // )
27+ T_SEMICOLON // ;
28+ T_EQUAL // =
29+ T_ANGLE_LEFT // <
30+ T_ANGLE_LEFT_EQUAL //<=
31+ T_ANGLE_RIGHT_EQUAL //>=
32+ T_ANGLE_RIGHT // >
33+ T_NOT_EQUAL // <> or !=
34+ T_POINT // .
3535)
3636
3737type State int // 状态机的状态
@@ -77,7 +77,7 @@ func (s *InputScanner) Scan() (tok Token, lit string) {
7777 state := STATE_INIT
7878 for state != STATE_END {
7979 if checkCharType (ch ) == ILLEGAL_SYMBOL {
80- return ILLEGAL , string (ch )
80+ return T_ILLEGAL , string (ch )
8181 }
8282 // buf.WriteRune(ch)
8383 switch state {
@@ -92,21 +92,21 @@ func (s *InputScanner) Scan() (tok Token, lit string) {
9292 case SPECIAL_SYMBOL :
9393 switch ch {
9494 case eof :
95- return EOF , ""
95+ return T_EOF , ""
9696 case '.' :
97- return POINT , string (ch )
97+ return T_POINT , string (ch )
9898 case '*' :
99- return ASTERISK , string (ch )
99+ return T_ASTERISK , string (ch )
100100 case ',' :
101- return COMMA , string (ch )
101+ return T_COMMA , string (ch )
102102 case '(' :
103- return LEFT_PARENTHESIS , string (ch )
103+ return T_LEFT_PARENTHESIS , string (ch )
104104 case ')' :
105- return RIGHT_PARENTHESIS , string (ch )
105+ return T_RIGHT_PARENTHESIS , string (ch )
106106 case ';' :
107- return SEMICOLON , string (ch )
107+ return T_SEMICOLON , string (ch )
108108 case '=' :
109- return EQUAL , string (ch )
109+ return T_EQUAL , string (ch )
110110 case '<' :
111111 buf .WriteRune (ch )
112112 state = STATE_ANGLE_LEFT
@@ -116,22 +116,22 @@ func (s *InputScanner) Scan() (tok Token, lit string) {
116116 }
117117 case SPACE :
118118 case UNDERLINE :
119- return ILLEGAL , string (ch )
119+ return T_ILLEGAL , string (ch )
120120 }
121121 case STATE_INTEGER :
122122 switch checkCharType (ch ) {
123123 case NUM :
124124 buf .WriteRune (ch )
125125 case CHAR , SPACE , UNDERLINE :
126126 s .unread ()
127- return INTEGER , buf .String ()
127+ return T_INTEGER , buf .String ()
128128 case SPECIAL_SYMBOL :
129129 if ch == '.' {
130130 buf .WriteRune (ch )
131131 state = STATE_POINT
132132 } else {
133133 s .unread ()
134- return INTEGER , buf .String ()
134+ return T_INTEGER , buf .String ()
135135 }
136136 }
137137 case STATE_POINT :
@@ -140,63 +140,63 @@ func (s *InputScanner) Scan() (tok Token, lit string) {
140140 buf .WriteRune (ch )
141141 state = STATE_FRACTION
142142 case CHAR , SPECIAL_SYMBOL , SPACE , UNDERLINE :
143- return ILLEGAL , string (ch )
143+ return T_ILLEGAL , string (ch )
144144 }
145145 case STATE_FRACTION :
146146 switch checkCharType (ch ) {
147147 case NUM :
148148 buf .WriteRune (ch )
149149 case CHAR , SPECIAL_SYMBOL , SPACE , UNDERLINE :
150150 s .unread ()
151- return FLOAT , buf .String ()
151+ return T_FLOAT , buf .String ()
152152 }
153153 case STATE_IDENT :
154154 switch checkCharType (ch ) {
155155 case NUM , CHAR , UNDERLINE :
156156 buf .WriteRune (ch )
157157 case SPECIAL_SYMBOL , SPACE :
158158 s .unread ()
159- return IDENT , buf .String ()
159+ return T_IDENT , buf .String ()
160160 }
161161 case STATE_ANGLE_LEFT :
162162 switch checkCharType (ch ) {
163163 case NUM , CHAR , SPACE :
164164 s .unread ()
165- return ANGLE_LEFT , buf .String ()
165+ return T_ANGLE_LEFT , buf .String ()
166166 case SPECIAL_SYMBOL :
167167 // ch = s.read()
168168 if ch == '=' {
169- return ANGLE_LEFT_EQUAL , "<="
169+ return T_ANGLE_LEFT_EQUAL , "<="
170170 } else if ch == '>' {
171- return NOT_EQUAL , "<>"
171+ return T_NOT_EQUAL , "<>"
172172 } else {
173173 s .unread ()
174- return ANGLE_LEFT , buf .String ()
174+ return T_ANGLE_LEFT , buf .String ()
175175 }
176176 }
177177 case STATE_ANGLE_RIGHT :
178178 switch checkCharType (ch ) {
179179 case NUM , CHAR , SPACE :
180180 s .unread ()
181- return ANGLE_RIGHT , buf .String ()
181+ return T_ANGLE_RIGHT , buf .String ()
182182 case SPECIAL_SYMBOL :
183183 // ch = s.read()
184184 if ch == '=' {
185- return ANGLE_RIGHT_EQUAL , ">="
185+ return T_ANGLE_RIGHT_EQUAL , ">="
186186 } else {
187187 s .unread ()
188- return ANGLE_RIGHT , buf .String ()
188+ return T_ANGLE_RIGHT , buf .String ()
189189 }
190190 }
191191 }
192192 ch = s .read ()
193193 }
194194
195- return ILLEGAL , string (ch )
195+ return T_ILLEGAL , string (ch )
196196}
197197
198198// read reads the next rune from the buffered reader.
199- // Returns the rune(0) if an error occurs (or io.EOF is returned).
199+ // Returns the rune(0) if an error occurs (or io.T_EOF is returned).
200200func (s * InputScanner ) read () rune {
201201 ch , _ , err := s .r .ReadRune ()
202202 if err != nil {
0 commit comments