| Copyright | (C) CSIRO 2017-2019 | 
|---|---|
| License | BSD3 | 
| Maintainer | Isaac Elliott <isaace71295@gmail.com> | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | None | 
| Language | Haskell2010 | 
Language.Python.Syntax.Operator.Binary
Description
This module contains a datatype for binary operators and a precedence table with associated operations. This presentation of operators is simpler and more flexible than hard-coding them into the syntax tree.
Synopsis
- data BinOp a- = Is (Ann a) [Whitespace]
- | IsNot (Ann a) [Whitespace] [Whitespace]
- | In (Ann a) [Whitespace]
- | NotIn (Ann a) [Whitespace] [Whitespace]
- | Minus (Ann a) [Whitespace]
- | Exp (Ann a) [Whitespace]
- | BoolAnd (Ann a) [Whitespace]
- | BoolOr (Ann a) [Whitespace]
- | Eq (Ann a) [Whitespace]
- | Lt (Ann a) [Whitespace]
- | LtEq (Ann a) [Whitespace]
- | Gt (Ann a) [Whitespace]
- | GtEq (Ann a) [Whitespace]
- | NotEq (Ann a) [Whitespace]
- | Multiply (Ann a) [Whitespace]
- | Divide (Ann a) [Whitespace]
- | FloorDivide (Ann a) [Whitespace]
- | Percent (Ann a) [Whitespace]
- | Plus (Ann a) [Whitespace]
- | BitOr (Ann a) [Whitespace]
- | BitXor (Ann a) [Whitespace]
- | BitAnd (Ann a) [Whitespace]
- | ShiftLeft (Ann a) [Whitespace]
- | ShiftRight (Ann a) [Whitespace]
- | At (Ann a) [Whitespace]
 
- data Assoc
- data OpEntry = OpEntry {}
- opPrec :: Lens' OpEntry Int
- opOperator :: Lens' OpEntry (BinOp ())
- opAssoc :: Lens' OpEntry Assoc
- operatorTable :: [OpEntry]
- sameOperator :: BinOp a -> BinOp a' -> Bool
- isComparison :: BinOp a -> Bool
- lookupOpEntry :: BinOp a -> [OpEntry] -> OpEntry
Documentation
A Python binary operator, such as +, along with its trailing Whitespace
Constructors
| Is (Ann a) [Whitespace] | a is b | 
| IsNot (Ann a) [Whitespace] [Whitespace] | a is not b | 
| In (Ann a) [Whitespace] | a in b | 
| NotIn (Ann a) [Whitespace] [Whitespace] | a not in b | 
| Minus (Ann a) [Whitespace] | a - b | 
| Exp (Ann a) [Whitespace] | a ** b | 
| BoolAnd (Ann a) [Whitespace] | a and b | 
| BoolOr (Ann a) [Whitespace] | a or b | 
| Eq (Ann a) [Whitespace] | a == b | 
| Lt (Ann a) [Whitespace] | a < b | 
| LtEq (Ann a) [Whitespace] | a <= b | 
| Gt (Ann a) [Whitespace] | a > b | 
| GtEq (Ann a) [Whitespace] | a >= b | 
| NotEq (Ann a) [Whitespace] | a != b | 
| Multiply (Ann a) [Whitespace] | a * b | 
| Divide (Ann a) [Whitespace] | a / b | 
| FloorDivide (Ann a) [Whitespace] | a // b | 
| Percent (Ann a) [Whitespace] | a % b | 
| Plus (Ann a) [Whitespace] | a + b | 
| BitOr (Ann a) [Whitespace] | a | b | 
| BitXor (Ann a) [Whitespace] | a ^ b | 
| BitAnd (Ann a) [Whitespace] | a & b | 
| ShiftLeft (Ann a) [Whitespace] | a << b | 
| ShiftRight (Ann a) [Whitespace] | a >> b | 
| At (Ann a) [Whitespace] | 
 | 
Instances
The associativity of an operator. Each operator is either left-associative or right associative.
Left associative:
x + y + z = (x + y) + z
Right associative:
x + y + z = x + (y + z)
An operator along with its precedence and associativity.
opOperator :: Lens' OpEntry (BinOp ()) #
operatorTable :: [OpEntry] #
operatorTable is a list of all operators in ascending order of precedence.
sameOperator :: BinOp a -> BinOp a' -> Bool #
Compare two BinOps to determine whether they represent the same operator, ignoring annotations and trailing whitespace.
isComparison :: BinOp a -> Bool #
Is a BinOp a comparison, such as <=
lookupOpEntry :: BinOp a -> [OpEntry] -> OpEntry #
Retrieve the information for a given operator from the operator table.