lang: add operator precedence and associativity definitions
This commit is contained in:
@@ -36,25 +36,6 @@ enum ivy_ast_node_type {
|
||||
IVY_AST_TYPE_COUNT,
|
||||
};
|
||||
|
||||
enum ivy_ast_op {
|
||||
IVY_OP_NONE = 0,
|
||||
IVY_OP_ASSIGN,
|
||||
IVY_OP_ADD,
|
||||
IVY_OP_SUBTRACT,
|
||||
IVY_OP_MULTIPLY,
|
||||
IVY_OP_DIVIDE,
|
||||
IVY_OP_LESS_THAN,
|
||||
IVY_OP_GREATER_THAN,
|
||||
IVY_OP_EQUAL,
|
||||
IVY_OP_NOT_EQUAL,
|
||||
IVY_OP_LESS_EQUAL,
|
||||
IVY_OP_GREATER_EQUAL,
|
||||
IVY_OP_AND,
|
||||
IVY_OP_OR,
|
||||
IVY_OP_IS,
|
||||
IVY_OP_NOT,
|
||||
};
|
||||
|
||||
enum ivy_ast_msgh_recipient_type {
|
||||
IVY_AST_MSGH_NONE = 0,
|
||||
IVY_AST_MSGH_OBJECT,
|
||||
|
||||
80
lang/include/ivy/lang/operator.h
Normal file
80
lang/include/ivy/lang/operator.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#ifndef IVY_LANG_OPERATOR_H_
|
||||
#define IVY_LANG_OPERATOR_H_
|
||||
|
||||
#include <ivy/misc.h>
|
||||
|
||||
enum ivy_operator_precedence {
|
||||
IVY_PRECEDENCE_ASSIGN,
|
||||
IVY_PRECEDENCE_KEYWORD_MSG,
|
||||
IVY_PRECEDENCE_IF_ELSE,
|
||||
IVY_PRECEDENCE_CASCADE,
|
||||
IVY_PRECEDENCE_LOGICAL_OR,
|
||||
IVY_PRECEDENCE_LOGICAL_AND,
|
||||
IVY_PRECEDENCE_BITWISE_OR,
|
||||
IVY_PRECEDENCE_BITWISE_XOR,
|
||||
IVY_PRECEDENCE_BITWISE_AND,
|
||||
IVY_PRECEDENCE_EQUALITY,
|
||||
IVY_PRECEDENCE_COMPARISON,
|
||||
IVY_PRECEDENCE_BITSHIFT,
|
||||
IVY_PRECEDENCE_ADDITION,
|
||||
IVY_PRECEDENCE_MULTIPLICATION,
|
||||
IVY_PRECEDENCE_UNARY_MSG,
|
||||
IVY_PRECEDENCE_IS,
|
||||
IVY_PRECEDENCE_NOT,
|
||||
IVY_PRECEDENCE_SUBSCRIPT,
|
||||
};
|
||||
|
||||
enum ivy_operator_associativity {
|
||||
IVY_ASSOCIATIVITY_LEFT,
|
||||
IVY_ASSOCIATIVITY_RIGHT,
|
||||
};
|
||||
|
||||
enum ivy_operator_id {
|
||||
IVY_OP_NONE = 0,
|
||||
IVY_OP_ASSIGN,
|
||||
IVY_OP_ADD,
|
||||
IVY_OP_SUBTRACT,
|
||||
IVY_OP_MULTIPLY,
|
||||
IVY_OP_DIVIDE,
|
||||
IVY_OP_MODULO,
|
||||
IVY_OP_LEFT_SHIFT,
|
||||
IVY_OP_RIGHT_SHIFT,
|
||||
IVY_OP_BINARY_AND,
|
||||
IVY_OP_BINARY_OR,
|
||||
IVY_OP_BINARY_XOR,
|
||||
IVY_OP_LESS_THAN,
|
||||
IVY_OP_GREATER_THAN,
|
||||
IVY_OP_CASCADE,
|
||||
IVY_OP_EQUAL,
|
||||
IVY_OP_NOT_EQUAL,
|
||||
IVY_OP_LESS_EQUAL,
|
||||
IVY_OP_GREATER_EQUAL,
|
||||
IVY_OP_ADD_ASSIGN,
|
||||
IVY_OP_SUBTRACT_ASSIGN,
|
||||
IVY_OP_MULTIPLY_ASSIGN,
|
||||
IVY_OP_DIVIDE_ASSIGN,
|
||||
IVY_OP_MODULO_ASSIGN,
|
||||
IVY_OP_LEFT_SHIFT_ASSIGN,
|
||||
IVY_OP_RIGHT_SHIFT_ASSIGN,
|
||||
IVY_OP_BINARY_AND_ASSIGN,
|
||||
IVY_OP_BINARY_OR_ASSIGN,
|
||||
IVY_OP_BINARY_XOR_ASSIGN,
|
||||
IVY_OP_AND,
|
||||
IVY_OP_OR,
|
||||
IVY_OP_IS,
|
||||
IVY_OP_NOT,
|
||||
IVY_OP_UNDERSTANDS,
|
||||
IVY_OP_SELF_ACCESS,
|
||||
IVY_OP_PKG_ACCESS,
|
||||
};
|
||||
|
||||
struct ivy_operator {
|
||||
enum ivy_operator_id op_id;
|
||||
unsigned int op_token;
|
||||
enum ivy_operator_precedence op_precedence;
|
||||
enum ivy_operator_associativity op_associativity;
|
||||
};
|
||||
|
||||
IVY_API const struct ivy_operator *ivy_operator_get(unsigned int token);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user