github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/mapper/exprmapper/expression/gocc/lexer/lexer.go (about)

     1  // Code generated by gocc; DO NOT EDIT.
     2  
     3  package lexer
     4  
     5  import (
     6  	"io/ioutil"
     7  	"unicode/utf8"
     8  
     9  	"github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/expression/gocc/token"
    10  )
    11  
    12  const (
    13  	NoState    = -1
    14  	NumStates  = 75
    15  	NumSymbols = 80
    16  )
    17  
    18  type Lexer struct {
    19  	src    []byte
    20  	pos    int
    21  	line   int
    22  	column int
    23  }
    24  
    25  func NewLexer(src []byte) *Lexer {
    26  	lexer := &Lexer{
    27  		src:    src,
    28  		pos:    0,
    29  		line:   1,
    30  		column: 1,
    31  	}
    32  	return lexer
    33  }
    34  
    35  func NewLexerFile(fpath string) (*Lexer, error) {
    36  	src, err := ioutil.ReadFile(fpath)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	return NewLexer(src), nil
    41  }
    42  
    43  func (l *Lexer) Scan() (tok *token.Token) {
    44  	tok = new(token.Token)
    45  	if l.pos >= len(l.src) {
    46  		tok.Type = token.EOF
    47  		tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = l.pos, l.line, l.column
    48  		return
    49  	}
    50  	start, startLine, startColumn, end := l.pos, l.line, l.column, 0
    51  	tok.Type = token.INVALID
    52  	state, rune1, size := 0, rune(-1), 0
    53  	for state != -1 {
    54  		if l.pos >= len(l.src) {
    55  			rune1 = -1
    56  		} else {
    57  			rune1, size = utf8.DecodeRune(l.src[l.pos:])
    58  			l.pos += size
    59  		}
    60  
    61  		nextState := -1
    62  		if rune1 != -1 {
    63  			nextState = TransTab[state](rune1)
    64  		}
    65  		state = nextState
    66  
    67  		if state != -1 {
    68  
    69  			switch rune1 {
    70  			case '\n':
    71  				l.line++
    72  				l.column = 1
    73  			case '\r':
    74  				l.column = 1
    75  			case '\t':
    76  				l.column += 4
    77  			default:
    78  				l.column++
    79  			}
    80  
    81  			switch {
    82  			case ActTab[state].Accept != -1:
    83  				tok.Type = ActTab[state].Accept
    84  				end = l.pos
    85  			case ActTab[state].Ignore != "":
    86  				start, startLine, startColumn = l.pos, l.line, l.column
    87  				state = 0
    88  				if start >= len(l.src) {
    89  					tok.Type = token.EOF
    90  				}
    91  
    92  			}
    93  		} else {
    94  			if tok.Type == token.INVALID {
    95  				end = l.pos
    96  			}
    97  		}
    98  	}
    99  	if end > start {
   100  		l.pos = end
   101  		tok.Lit = l.src[start:end]
   102  	} else {
   103  		tok.Lit = []byte{}
   104  	}
   105  	tok.Pos.Offset, tok.Pos.Line, tok.Pos.Column = start, startLine, startColumn
   106  
   107  	return
   108  }
   109  
   110  func (l *Lexer) Reset() {
   111  	l.pos = 0
   112  }
   113  
   114  /*
   115  Lexer symbols:
   116  0: '"'
   117  1: '"'
   118  2: '''
   119  3: '''
   120  4: '$'
   121  5: '|'
   122  6: '|'
   123  7: '&'
   124  8: '&'
   125  9: '('
   126  10: ')'
   127  11: '='
   128  12: '='
   129  13: '!'
   130  14: '='
   131  15: '<'
   132  16: '<'
   133  17: '='
   134  18: '>'
   135  19: '>'
   136  20: '='
   137  21: '+'
   138  22: '-'
   139  23: '*'
   140  24: '/'
   141  25: '%'
   142  26: '('
   143  27: ')'
   144  28: ','
   145  29: '?'
   146  30: ':'
   147  31: 't'
   148  32: 'r'
   149  33: 'u'
   150  34: 'e'
   151  35: 'f'
   152  36: 'a'
   153  37: 'l'
   154  38: 's'
   155  39: 'e'
   156  40: 'n'
   157  41: 'i'
   158  42: 'l'
   159  43: 'n'
   160  44: 'u'
   161  45: 'l'
   162  46: 'l'
   163  47: 'e'
   164  48: 'E'
   165  49: '+'
   166  50: '-'
   167  51: '.'
   168  52: '.'
   169  53: '.'
   170  54: '.'
   171  55: '_'
   172  56: '['
   173  57: ']'
   174  58: '.'
   175  59: '-'
   176  60: '['
   177  61: ']'
   178  62: '_'
   179  63: ' '
   180  64: '$'
   181  65: '{'
   182  66: '}'
   183  67: '\'
   184  68: ' '
   185  69: '\t'
   186  70: '\n'
   187  71: '\r'
   188  72: '0'-'9'
   189  73: 'a'-'z'
   190  74: 'A'-'Z'
   191  75: '0'-'9'
   192  76: 'a'-'z'
   193  77: 'A'-'Z'
   194  78: '0'-'9'
   195  79: .
   196  */