Ejemplo n.º 1
0
func rhsCase(l lexer.Lexer, tok string) (syms.SymbolID, error) {
	if tok == "" {
		return syms.ERROR, errors.New("empty rhs identifier")
	}
	symbols := l.GetSymbolSet()
	sid, err := symbols.GetByName(tok)
	if err == nil {
		return sid, nil
	}

	lt := len(tok)
	if isIdentName(tok) {
		return l.Ident(tok[1 : lt-1]), nil
	} else if isOperatorName(tok) {
		return l.Operator(tok[1 : lt-1]), nil
	}
	if tok == "" || !tokenRe.MatchString(tok) {
		return syms.ERROR, fmt.Errorf("%s is not a valid rhs identifier", tok)
	}
	sid, err = symbols.Add(tok, false)
	return sid, err
}