コード例 #1
0
ファイル: lexer.go プロジェクト: ivandejanovic/mlpl
func (buffer *lexBuffer) factor() *types.TreeNode {
	var node *types.TreeNode
	var err error

	switch buffer.token.TokenType {
	case types.NUM:
		node = newExpNode(types.ConstK, buffer.token.Lineno)
		if buffer.token.TokenType == types.NUM {
			node.Val, err = strconv.Atoi(buffer.token.TokenString)
			if err != nil {
				panic(err)
			}
		}
		buffer.match(types.NUM)
	case types.ID:
		node = newExpNode(types.IdK, buffer.token.Lineno)
		if buffer.token.TokenType == types.ID {
			node.Name = buffer.token.TokenString
		}
		buffer.match(types.ID)
	case types.STRING:
		node = newExpNode(types.StringK, buffer.token.Lineno)
		node.ValString = buffer.token.TokenString
		buffer.match(types.STRING)
	case types.LPAREN:
		buffer.match(types.LPAREN)
		node = buffer.exp()
		buffer.match(types.RPAREN)
	default:
		syntaxError(buffer.token)
	}

	return node
}