lang: add operator precedence and associativity definitions

This commit is contained in:
2024-11-27 22:29:01 +00:00
parent c7e3cea9b9
commit 31de937a21
3 changed files with 139 additions and 19 deletions

View File

@@ -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,

View 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