tokens.mx raw

   1  package token
   2  
   3  type Token uint32
   4  
   5  const (
   6  	_    Token = iota
   7  	EOF
   8  
   9  	NameType
  10  	Literal
  11  
  12  	OperatorType
  13  	AssignOp
  14  	IncOp
  15  	Assign
  16  	Define
  17  	Arrow
  18  	Star
  19  
  20  	Lparen
  21  	Lbrack
  22  	Lbrace
  23  	Rparen
  24  	Rbrack
  25  	Rbrace
  26  	Comma
  27  	Semi
  28  	Colon
  29  	Dot
  30  	DotDotDot
  31  
  32  	Break
  33  	Case
  34  	Chan
  35  	Const
  36  	Continue
  37  	Default
  38  	Defer
  39  	Else
  40  	Fallthrough
  41  	For
  42  	Func
  43  	Go
  44  	Goto
  45  	If
  46  	Import
  47  	Interface
  48  	Map
  49  	Package
  50  	Range
  51  	Return
  52  	Select
  53  	Struct
  54  	Switch
  55  	TypeType
  56  	Var
  57  
  58  	tokenCount
  59  )
  60  
  61  const _ uint64 = 1 << (tokenCount - 1)
  62  
  63  func Contains(tokset uint64, tok Token) (ok bool) {
  64  	var bit uint64 = 1
  65  	bit = bit << tok
  66  	return tokset&bit != 0
  67  }
  68  
  69  type LitKind uint8
  70  
  71  const (
  72  	IntLit LitKind = iota
  73  	FloatLit
  74  	ImagLit
  75  	RuneLit
  76  	StringLit
  77  )
  78  
  79  type Operator uint32
  80  
  81  const (
  82  	_ Operator = iota
  83  
  84  	Def
  85  	Not
  86  	Recv
  87  	Tilde
  88  
  89  	OrOr
  90  
  91  	AndAnd
  92  
  93  	Eql
  94  	Neq
  95  	Lss
  96  	Leq
  97  	Gtr
  98  	Geq
  99  
 100  	Add
 101  	Sub
 102  	Or
 103  	Xor
 104  
 105  	Mul
 106  	Div
 107  	Rem
 108  	And
 109  	AndNot
 110  	Shl
 111  	Shr
 112  )
 113  
 114  const (
 115  	_ = iota
 116  	PrecOrOr
 117  	PrecAndAnd
 118  	PrecCmp
 119  	PrecAdd
 120  	PrecMul
 121  )
 122  
 123  type ConstVal interface{ String() string }
 124  
 125  func Itoa(n int32) (s string) { return simpleItoa64(int64(n)) }
 126  func Itoa64(n int64) (s string) { return simpleItoa64(n) }
 127  
 128  func simpleItoa64(n int64) (s string) {
 129  	if n == 0 {
 130  		return "0"
 131  	}
 132  	neg := n < 0
 133  	if neg {
 134  		n = -n
 135  	}
 136  	buf := []byte{:0:20}
 137  	for n > 0 {
 138  		push(buf, byte('0'+n%10))
 139  		n /= 10
 140  	}
 141  	if neg {
 142  		push(buf, '-')
 143  	}
 144  	for i, j := int32(0), int32(len(buf))-1; i < j; i, j = i+1, j-1 {
 145  		buf[i], buf[j] = buf[j], buf[i]
 146  	}
 147  	return string(buf)
 148  }
 149  
 150  const Token_name = "EOFnameliteralopop=opop=:=<-*([{)]},;:....breakcasechanconstcontinuedefaultdeferelsefallthroughforfuncgogotoifimportinterfacemappackagerangereturnselectstructswitchtypevar"
 151  
 152  func (t *Token) String() (s string) {
 153  	idx := [48]uint8{0, 3, 7, 14, 16, 19, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 47, 51, 55, 60, 68, 75, 80, 84, 95, 98, 102, 104, 108, 110, 116, 125, 128, 135, 140, 146, 152, 158, 164, 168, 171, 171}
 154  	i := *t - 1
 155  	if i >= Token(len(idx)-1) {
 156  		return "token(" | simpleItoa64(int64(i+1)) | ")"
 157  	}
 158  	return Token_name[idx[i]:idx[i+1]]
 159  }
 160  
 161  const _Operator_name = ":!<-~||&&==!=<<=>>=+-|^*/%&&^<<>>"
 162  
 163  func (i *Operator) String() (s string) {
 164  	idx := [24]uint8{0, 1, 2, 4, 5, 7, 9, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 33}
 165  	o := *i - 1
 166  	if o >= Operator(len(idx)-1) {
 167  		return "Operator(" | simpleItoa64(int64(o+1)) | ")"
 168  	}
 169  	return _Operator_name[idx[o]:idx[o+1]]
 170  }
 171