Numworks Epsilon  1.4.1
Graphing Calculator Operating System
parse.h File Reference
#include <stddef.h>
#include <stdint.h>
#include "py/obj.h"

Go to the source code of this file.

Classes

struct  _mp_parse_node_struct_t
 
struct  _mp_parse_t
 

Macros

#define MP_PARSE_NODE_NULL   (0)
 
#define MP_PARSE_NODE_SMALL_INT   (0x1)
 
#define MP_PARSE_NODE_ID   (0x02)
 
#define MP_PARSE_NODE_STRING   (0x06)
 
#define MP_PARSE_NODE_BYTES   (0x0a)
 
#define MP_PARSE_NODE_TOKEN   (0x0e)
 
#define MP_PARSE_NODE_IS_NULL(pn)   ((pn) == MP_PARSE_NODE_NULL)
 
#define MP_PARSE_NODE_IS_LEAF(pn)   ((pn) & 3)
 
#define MP_PARSE_NODE_IS_STRUCT(pn)   ((pn) != MP_PARSE_NODE_NULL && ((pn) & 3) == 0)
 
#define MP_PARSE_NODE_IS_STRUCT_KIND(pn, k)   ((pn) != MP_PARSE_NODE_NULL && ((pn) & 3) == 0 && MP_PARSE_NODE_STRUCT_KIND((mp_parse_node_struct_t*)(pn)) == (k))
 
#define MP_PARSE_NODE_IS_SMALL_INT(pn)   (((pn) & 0x1) == MP_PARSE_NODE_SMALL_INT)
 
#define MP_PARSE_NODE_IS_ID(pn)   (((pn) & 0x0f) == MP_PARSE_NODE_ID)
 
#define MP_PARSE_NODE_IS_TOKEN(pn)   (((pn) & 0x0f) == MP_PARSE_NODE_TOKEN)
 
#define MP_PARSE_NODE_IS_TOKEN_KIND(pn, k)   ((pn) == (MP_PARSE_NODE_TOKEN | ((k) << 4)))
 
#define MP_PARSE_NODE_LEAF_KIND(pn)   ((pn) & 0x0f)
 
#define MP_PARSE_NODE_LEAF_ARG(pn)   (((uintptr_t)(pn)) >> 4)
 
#define MP_PARSE_NODE_LEAF_SMALL_INT(pn)   (((mp_int_t)(intptr_t)(pn)) >> 1)
 
#define MP_PARSE_NODE_STRUCT_KIND(pns)   ((pns)->kind_num_nodes & 0xff)
 
#define MP_PARSE_NODE_STRUCT_NUM_NODES(pns)   ((pns)->kind_num_nodes >> 8)
 

Typedefs

typedef uintptr_t mp_parse_node_t
 
typedef struct _mp_parse_node_struct_t mp_parse_node_struct_t
 
typedef struct _mp_parse_t mp_parse_tree_t
 

Enumerations

enum  mp_parse_input_kind_t { MP_PARSE_SINGLE_INPUT, MP_PARSE_FILE_INPUT, MP_PARSE_EVAL_INPUT }
 

Functions

bool mp_parse_node_is_const_false (mp_parse_node_t pn)
 
bool mp_parse_node_is_const_true (mp_parse_node_t pn)
 
bool mp_parse_node_get_int_maybe (mp_parse_node_t pn, mp_obj_t *o)
 
int mp_parse_node_extract_list (mp_parse_node_t *pn, size_t pn_kind, mp_parse_node_t **nodes)
 
void mp_parse_node_print (mp_parse_node_t pn, size_t indent)
 
mp_parse_tree_t mp_parse (struct _mp_lexer_t *lex, mp_parse_input_kind_t input_kind)
 
void mp_parse_tree_clear (mp_parse_tree_t *tree)
 

Macro Definition Documentation

◆ MP_PARSE_NODE_BYTES

#define MP_PARSE_NODE_BYTES   (0x0a)

Definition at line 49 of file parse.h.

◆ MP_PARSE_NODE_ID

#define MP_PARSE_NODE_ID   (0x02)

Definition at line 47 of file parse.h.

◆ MP_PARSE_NODE_IS_ID

#define MP_PARSE_NODE_IS_ID (   pn)    (((pn) & 0x0f) == MP_PARSE_NODE_ID)

Definition at line 69 of file parse.h.

◆ MP_PARSE_NODE_IS_LEAF

#define MP_PARSE_NODE_IS_LEAF (   pn)    ((pn) & 3)

Definition at line 64 of file parse.h.

◆ MP_PARSE_NODE_IS_NULL

#define MP_PARSE_NODE_IS_NULL (   pn)    ((pn) == MP_PARSE_NODE_NULL)

Definition at line 63 of file parse.h.

◆ MP_PARSE_NODE_IS_SMALL_INT

#define MP_PARSE_NODE_IS_SMALL_INT (   pn)    (((pn) & 0x1) == MP_PARSE_NODE_SMALL_INT)

Definition at line 68 of file parse.h.

◆ MP_PARSE_NODE_IS_STRUCT

#define MP_PARSE_NODE_IS_STRUCT (   pn)    ((pn) != MP_PARSE_NODE_NULL && ((pn) & 3) == 0)

Definition at line 65 of file parse.h.

◆ MP_PARSE_NODE_IS_STRUCT_KIND

#define MP_PARSE_NODE_IS_STRUCT_KIND (   pn,
 
)    ((pn) != MP_PARSE_NODE_NULL && ((pn) & 3) == 0 && MP_PARSE_NODE_STRUCT_KIND((mp_parse_node_struct_t*)(pn)) == (k))

Definition at line 66 of file parse.h.

◆ MP_PARSE_NODE_IS_TOKEN

#define MP_PARSE_NODE_IS_TOKEN (   pn)    (((pn) & 0x0f) == MP_PARSE_NODE_TOKEN)

Definition at line 70 of file parse.h.

◆ MP_PARSE_NODE_IS_TOKEN_KIND

#define MP_PARSE_NODE_IS_TOKEN_KIND (   pn,
 
)    ((pn) == (MP_PARSE_NODE_TOKEN | ((k) << 4)))

Definition at line 71 of file parse.h.

◆ MP_PARSE_NODE_LEAF_ARG

#define MP_PARSE_NODE_LEAF_ARG (   pn)    (((uintptr_t)(pn)) >> 4)

Definition at line 74 of file parse.h.

◆ MP_PARSE_NODE_LEAF_KIND

#define MP_PARSE_NODE_LEAF_KIND (   pn)    ((pn) & 0x0f)

Definition at line 73 of file parse.h.

◆ MP_PARSE_NODE_LEAF_SMALL_INT

#define MP_PARSE_NODE_LEAF_SMALL_INT (   pn)    (((mp_int_t)(intptr_t)(pn)) >> 1)

Definition at line 75 of file parse.h.

◆ MP_PARSE_NODE_NULL

#define MP_PARSE_NODE_NULL   (0)

Definition at line 45 of file parse.h.

◆ MP_PARSE_NODE_SMALL_INT

#define MP_PARSE_NODE_SMALL_INT   (0x1)

Definition at line 46 of file parse.h.

◆ MP_PARSE_NODE_STRING

#define MP_PARSE_NODE_STRING   (0x06)

Definition at line 48 of file parse.h.

◆ MP_PARSE_NODE_STRUCT_KIND

#define MP_PARSE_NODE_STRUCT_KIND (   pns)    ((pns)->kind_num_nodes & 0xff)

Definition at line 76 of file parse.h.

◆ MP_PARSE_NODE_STRUCT_NUM_NODES

#define MP_PARSE_NODE_STRUCT_NUM_NODES (   pns)    ((pns)->kind_num_nodes >> 8)

Definition at line 77 of file parse.h.

◆ MP_PARSE_NODE_TOKEN

#define MP_PARSE_NODE_TOKEN   (0x0e)

Definition at line 50 of file parse.h.

Typedef Documentation

◆ mp_parse_node_struct_t

◆ mp_parse_node_t

Definition at line 52 of file parse.h.

◆ mp_parse_tree_t

typedef struct _mp_parse_t mp_parse_tree_t

Enumeration Type Documentation

◆ mp_parse_input_kind_t

Enumerator
MP_PARSE_SINGLE_INPUT 
MP_PARSE_FILE_INPUT 
MP_PARSE_EVAL_INPUT 

Definition at line 91 of file parse.h.

Function Documentation

◆ mp_parse()

mp_parse_tree_t mp_parse ( struct _mp_lexer_t lex,
mp_parse_input_kind_t  input_kind 
)

◆ mp_parse_node_extract_list()

int mp_parse_node_extract_list ( mp_parse_node_t pn,
size_t  pn_kind,
mp_parse_node_t **  nodes 
)

◆ mp_parse_node_get_int_maybe()

bool mp_parse_node_get_int_maybe ( mp_parse_node_t  pn,
mp_obj_t o 
)

◆ mp_parse_node_is_const_false()

bool mp_parse_node_is_const_false ( mp_parse_node_t  pn)

◆ mp_parse_node_is_const_true()

bool mp_parse_node_is_const_true ( mp_parse_node_t  pn)

◆ mp_parse_node_print()

void mp_parse_node_print ( mp_parse_node_t  pn,
size_t  indent 
)

◆ mp_parse_tree_clear()

void mp_parse_tree_clear ( mp_parse_tree_t tree)