| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- // Code generated by gocc; DO NOT EDIT.
- package token
- import (
- "fmt"
- "strconv"
- "unicode/utf8"
- )
- type Token struct {
- Type
- Lit []byte
- Pos
- }
- type Type int
- const (
- INVALID Type = iota
- EOF
- )
- type Pos struct {
- Offset int
- Line int
- Column int
- }
- func (p Pos) String() string {
- return fmt.Sprintf("Pos(offset=%d, line=%d, column=%d)", p.Offset, p.Line, p.Column)
- }
- type TokenMap struct {
- typeMap []string
- idMap map[string]Type
- }
- func (m TokenMap) Id(tok Type) string {
- if int(tok) < len(m.typeMap) {
- return m.typeMap[tok]
- }
- return "unknown"
- }
- func (m TokenMap) Type(tok string) Type {
- if typ, exist := m.idMap[tok]; exist {
- return typ
- }
- return INVALID
- }
- func (m TokenMap) TokenString(tok *Token) string {
- //TODO: refactor to print pos & token string properly
- return fmt.Sprintf("%s(%d,%s)", m.Id(tok.Type), tok.Type, tok.Lit)
- }
- func (m TokenMap) StringType(typ Type) string {
- return fmt.Sprintf("%s(%d)", m.Id(typ), typ)
- }
- // CharLiteralValue returns the string value of the char literal.
- func (t *Token) CharLiteralValue() string {
- return string(t.Lit[1 : len(t.Lit)-1])
- }
- // Float32Value returns the float32 value of the token or an error if the token literal does not
- // denote a valid float32.
- func (t *Token) Float32Value() (float32, error) {
- if v, err := strconv.ParseFloat(string(t.Lit), 32); err != nil {
- return 0, err
- } else {
- return float32(v), nil
- }
- }
- // Float64Value returns the float64 value of the token or an error if the token literal does not
- // denote a valid float64.
- func (t *Token) Float64Value() (float64, error) {
- return strconv.ParseFloat(string(t.Lit), 64)
- }
- // IDValue returns the string representation of an identifier token.
- func (t *Token) IDValue() string {
- return string(t.Lit)
- }
- // Int32Value returns the int32 value of the token or an error if the token literal does not
- // denote a valid float64.
- func (t *Token) Int32Value() (int32, error) {
- if v, err := strconv.ParseInt(string(t.Lit), 10, 64); err != nil {
- return 0, err
- } else {
- return int32(v), nil
- }
- }
- // Int64Value returns the int64 value of the token or an error if the token literal does not
- // denote a valid float64.
- func (t *Token) Int64Value() (int64, error) {
- return strconv.ParseInt(string(t.Lit), 10, 64)
- }
- // UTF8Rune decodes the UTF8 rune in the token literal. It returns utf8.RuneError if
- // the token literal contains an invalid rune.
- func (t *Token) UTF8Rune() (rune, error) {
- r, _ := utf8.DecodeRune(t.Lit)
- if r == utf8.RuneError {
- err := fmt.Errorf("Invalid rune")
- return r, err
- }
- return r, nil
- }
- // StringValue returns the string value of the token literal.
- func (t *Token) StringValue() string {
- return string(t.Lit[1 : len(t.Lit)-1])
- }
- var TokMap = TokenMap{
- typeMap: []string{
- "INVALID",
- "$",
- "graphx",
- "{",
- "}",
- "strict",
- "digraph",
- ";",
- "=",
- "node",
- "edge",
- "[",
- "]",
- ",",
- ":",
- "subgraph",
- "->",
- "--",
- "id",
- },
- idMap: map[string]Type{
- "INVALID": 0,
- "$": 1,
- "graphx": 2,
- "{": 3,
- "}": 4,
- "strict": 5,
- "digraph": 6,
- ";": 7,
- "=": 8,
- "node": 9,
- "edge": 10,
- "[": 11,
- "]": 12,
- ",": 13,
- ":": 14,
- "subgraph": 15,
- "->": 16,
- "--": 17,
- "id": 18,
- },
- }
|