func LookupParamType(ident string) ParamType {
	if typ, ok := paramTypes[ident]; ok {
		return typ
	}
	return ParamTypeUnExpected
}
LookupParamType accepts the string
representation of a parameter type.
Available:
"string"
"int"
"long"
"alphabetical"
"file"
"path"
package ast
import (
	"fmt"
	"reflect"
	"strconv"
)
type ParamType uint8
const (
	ParamTypeUnExpected ParamType = iota
	ParamTypeString
	ParamTypeInt
	ParamTypeLong
	ParamTypeBoolean
	ParamTypeAlphabetical
	ParamTypeFile
	ParamTypePath
)
func (pt ParamType) String() string {
	for k, v := range paramTypes {
		if v == pt {
			return k
		}
	}
	return "unexpected"
}
func (pt ParamType) Kind() reflect.Kind {
	switch pt {
	case ParamTypeAlphabetical:
		fallthrough
	case ParamTypeFile:
		fallthrough
	case ParamTypePath:
		fallthrough
	case ParamTypeString:
		return reflect.String
	case ParamTypeInt:
		return reflect.Int
	case ParamTypeLong:
		return reflect.Int64
	case ParamTypeBoolean:
		return reflect.Bool
	}
	return reflect.Invalid  
}
func ValidKind(k reflect.Kind) bool {
	switch k {
	case reflect.String:
		fallthrough
	case reflect.Int:
		fallthrough
	case reflect.Int64:
		fallthrough
	case reflect.Bool:
		return true
	default:
		return false
	}
}
func (pt ParamType) Assignable(k reflect.Kind) bool {
	return pt.Kind() == k
}
var paramTypes = map[string]ParamType{
	"string":       ParamTypeString,
	"int":          ParamTypeInt,
	"long":         ParamTypeLong,
	"boolean":      ParamTypeBoolean,
	"alphabetical": ParamTypeAlphabetical,
	"file":         ParamTypeFile,
	"path":         ParamTypePath,
}