hcl/zcl/zclsyntax/expression_ops.go
Martin Atkins 3a0dec45a6 zclsyntax: enum for expression operations
Also includes the binary operator precedence table.
2017-05-31 07:39:23 -07:00

63 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package zclsyntax
type Operation rune
const (
OpNil Operation = 0 // Zero value of Operation. Not a valid Operation.
OpLogicalOr Operation = ''
OpLogicalAnd Operation = '∧'
OpLogicalNot Operation = '!'
OpEqual Operation = '='
OpNotEqual Operation = '≠'
OpGreaterThan Operation = '>'
OpGreaterThanOrEqual Operation = '≥'
OpLessThan Operation = '<'
OpLessThanOrEqual Operation = '≤'
OpAdd Operation = '+'
OpSubtract Operation = '-'
OpMultiply Operation = '*'
OpDivide Operation = '/'
OpModulo Operation = '%'
OpNegate Operation = '∓'
)
var binaryOps []map[TokenType]Operation
func init() {
// This operation table maps from the operator's token type
// to the AST operation type. All expressions produced from
// binary operators are BinaryOp nodes.
//
// Binary operator groups are listed in order of precedence, with
// the *lowest* precedence first. Operators within the same group
// have left-to-right associativity.
binaryOps = []map[TokenType]Operation{
{
TokenOr: OpLogicalOr,
},
{
TokenAnd: OpLogicalAnd,
},
{
TokenEqual: OpEqual,
TokenNotEqual: OpNotEqual,
},
{
TokenGreaterThan: OpGreaterThan,
TokenGreaterThanEq: OpGreaterThanOrEqual,
TokenLessThan: OpLessThan,
TokenLessThanEq: OpLessThanOrEqual,
},
{
TokenPlus: OpAdd,
TokenMinus: OpSubtract,
},
{
TokenStar: OpMultiply,
TokenSlash: OpDivide,
TokenPercent: OpModulo,
},
}
}