Home | History | Annotate | Download | only in scanner

Lines Matching refs:ch

137 	ch rune // character before current srcPos
152 // as white space. To recognize a character ch <= ' ' as white space,
153 // set the ch'th bit in Whitespace (the Scanner's behavior is undefined
154 // for values ch > ' '). The field may be changed at any time.
162 IsIdentRune func(ch rune, i int) bool
198 s.ch = -2 // no char read yet, not EOF
215 ch, width := rune(s.srcBuf[s.srcPos]), 1
217 if ch >= utf8.RuneSelf {
260 ch = rune(s.srcBuf[s.srcPos])
261 if ch >= utf8.RuneSelf {
263 ch, width = utf8.DecodeRune(s.srcBuf[s.srcPos:s.srcEnd])
264 if ch == utf8.RuneError && width == 1 {
270 return ch
281 switch ch {
291 return ch
303 ch := s.Peek()
304 if ch != EOF {
305 s.ch = s.next()
307 return ch
314 if s.ch == -2 {
316 s.ch = s.next()
317 if s.ch == '\uFEFF' {
318 s.ch = s.next() // ignore BOM
321 return s.ch
337 func (s *Scanner) isIdentRune(ch rune, i int) bool {
339 return s.IsIdentRune(ch, i)
341 return ch == '_' || unicode.IsLetter(ch) || unicode.IsDigit(ch) && i > 0
346 ch := s.next()
347 for i := 1; s.isIdentRune(ch, i); i++ {
348 ch = s.next()
350 return ch
353 func digitVal(ch rune) int {
355 case '0' <= ch && ch <= '9':
356 return int(ch - '0')
357 case 'a' <= ch && ch <= 'f':
358 return int(ch - 'a' + 10)
359 case 'A' <= ch && ch <= 'F':
360 return int(ch - 'A' + 10)
365 func isDecimal(ch rune) bool { return '0' <= ch && ch <= '9' }
367 func (s *Scanner) scanMantissa(ch rune) rune {
368 for isDecimal(ch) {
369 ch = s.next()
371 return ch
374 func (s *Scanner) scanFraction(ch rune) rune {
375 if ch == '.' {
376 ch = s.scanMantissa(s.next())
378 return ch
381 func (s *Scanner) scanExponent(ch rune) rune {
382 if ch == 'e' || ch == 'E' {
383 ch = s.next()
384 if ch == '-' || ch == '+' {
385 ch = s.next()
387 ch = s.scanMantissa(ch)
389 return ch
392 func (s *Scanner) scanNumber(ch rune) (rune, rune) {
393 // isDecimal(ch)
394 if ch == '0' {
396 ch = s.next()
397 if ch == 'x' || ch == 'X' {
399 ch = s.next()
401 for digitVal(ch) < 16 {
402 ch = s.next()
411 for isDecimal(ch) {
412 if ch > '7' {
415 ch = s.next()
417 if s.Mode&ScanFloats != 0 && (ch == '.' || ch == 'e' || ch == 'E') {
419 ch = s.scanFraction(ch)
420 ch = s.scanExponent(ch)
421 return Float, ch
428 return Int, ch
431 ch = s.scanMantissa(ch)
432 if s.Mode&ScanFloats != 0 && (ch == '.' || ch == 'e' || ch == 'E') {
434 ch = s.scanFraction(ch)
435 ch = s.scanExponent(ch)
436 return Float, ch
438 return Int, ch
441 func (s *Scanner) scanDigits(ch rune, base, n int) rune {
442 for n > 0 && digitVal(ch) < base {
443 ch = s.next()
449 return ch
453 ch := s.next() // read character after '/'
454 switch ch {
457 ch = s.next()
459 ch = s.scanDigits(ch, 8, 3)
461 ch = s.scanDigits(s.next(), 16, 2)
463 ch = s.scanDigits(s.next(), 16, 4)
465 ch = s.scanDigits(s.next(), 16, 8)
469 return ch
473 ch := s.next() // read character after quote
474 for ch != quote {
475 if ch == '\n' || ch < 0 {
479 if ch == '\\' {
480 ch = s.scanEscape(quote)
482 ch = s.next()
490 ch := s.next() // read character after '`'
491 for ch != '`' {
492 if ch < 0 {
496 ch = s.next()
506 func (s *Scanner) scanComment(ch rune) rune {
507 // ch == '/' || ch == '*'
508 if ch == '/' {
510 ch = s.next() // read character after "//"
511 for ch != '\n' && ch >= 0 {
512 ch = s.next()
514 return ch
518 ch = s.next() // read character after "/*"
520 if ch < 0 {
524 ch0 := ch
525 ch = s.next()
526 if ch0 == '*' && ch == '/' {
527 ch = s.next()
531 return ch
540 ch := s.Peek()
548 for s.Whitespace&(1<<uint(ch)) != 0 {
549 ch = s.next()
572 tok := ch
574 case s.isIdentRune(ch, 0):
577 ch = s.scanIdentifier()
579 ch = s.next()
581 case isDecimal(ch):
583 tok, ch = s.scanNumber(ch)
585 ch = s.next()
588 switch ch {
596 ch = s.next()
602 ch = s.next()
604 ch = s.next()
605 if isDecimal(ch) && s.Mode&ScanFloats != 0 {
607 ch = s.scanMantissa(ch)
608 ch = s.scanExponent(ch)
611 ch = s.next()
612 if (ch == '/' || ch == '*') && s.Mode&ScanComments != 0 {
615 ch = s.scanComment(ch)
618 ch = s.scanComment(ch)
626 ch = s.next()
628 ch = s.next()
635 s.ch = ch