recutils
Data Structures | Macros | Functions
rec-sex.c File Reference
#include <config.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
#include <parse-datetime.h>
#include <rec.h>
#include <rec-utils.h>
#include <rec-sex-ast.h>
#include <rec-sex-parser.h>
#include <rec-sex-tab.h>

Data Structures

struct  rec_sex_s
 
struct  rec_sex_val_s
 

Macros

#define REC_SEX_VAL_INT   0
 
#define REC_SEX_VAL_REAL   1
 
#define REC_SEX_VAL_STR   2
 
#define EXEC_AST(RECORD)
 
#define GET_CHILD_VAL(DEST, NUM)
 
#define ATOI_VAL(DEST, VAL)
 
#define ATOD_VAL(DEST, VAL)
 
#define ATOTS_VAL(DEST, VAL)
 

Functions

rec_sex_t rec_sex_new (bool case_insensitive)
 
void rec_sex_destroy (rec_sex_t sex)
 
bool rec_sex_compile (rec_sex_t sex, const char *expr)
 
char * rec_sex_eval_str (rec_sex_t sex, rec_record_t record)
 
bool rec_sex_eval (rec_sex_t sex, rec_record_t record, bool *status)
 
void rec_sex_print_ast (rec_sex_t sex)
 

Macro Definition Documentation

◆ ATOD_VAL

#define ATOD_VAL (   DEST,
  VAL 
)

◆ ATOI_VAL

#define ATOI_VAL (   DEST,
  VAL 
)
Value:
do \
{ \
switch ((VAL).type) \
{ \
{ \
(DEST) = (VAL).int_val; \
break; \
} \
{ \
if (strcmp ((VAL).str_val, "") == 0) \
{ \
(DEST) = 0; \
} \
else \
{ \
if (!rec_atoi ((VAL).str_val, &(DEST))) \
{ \
*status = false; \
return res; \
} \
} \
break; \
} \
} \
} \
while (0)
#define REC_SEX_VAL_INT
Definition: rec-sex.c:49
#define REC_SEX_VAL_STR
Definition: rec-sex.c:51
bool rec_atoi(const char *str, int *number)
Definition: rec-utils.c:38

◆ ATOTS_VAL

#define ATOTS_VAL (   DEST,
  VAL 
)
Value:
do \
{ \
switch ((VAL).type) \
{ \
{ \
*status = false; \
return res; \
break; \
} \
{ \
*status = false; \
return res; \
break; \
} \
{ \
if (!parse_datetime (&(DEST), (VAL).str_val, NULL))\
{ \
*status = false; \
return res; \
} \
\
break; \
} \
} \
} \
while (0)
#define REC_SEX_VAL_REAL
Definition: rec-sex.c:50

◆ EXEC_AST

#define EXEC_AST (   RECORD)
Value:
do \
{ \
val = rec_sex_eval_node (sex, \
(RECORD), \
rec_sex_ast_top (sex->ast), \
status); \
\
switch (val.type) \
{ \
{ \
res = (val.int_val != 0); \
break; \
} \
{ \
res = false; \
break; \
} \
} \
} \
while (0)
rec_sex_ast_node_t rec_sex_ast_top(rec_sex_ast_t ast)
Definition: rec-sex-ast.c:238

◆ GET_CHILD_VAL

#define GET_CHILD_VAL (   DEST,
  NUM 
)
Value:
do \
{ \
(DEST) = rec_sex_eval_node (sex, \
record, \
rec_sex_ast_node_child (node, (NUM)), \
status); \
if (!*status) \
{ \
return res; \
} \
} \
while (0)
rec_sex_ast_node_t rec_sex_ast_node_child(rec_sex_ast_node_t node, int n)
Definition: rec-sex-ast.c:285

◆ REC_SEX_VAL_INT

#define REC_SEX_VAL_INT   0

◆ REC_SEX_VAL_REAL

#define REC_SEX_VAL_REAL   1

◆ REC_SEX_VAL_STR

#define REC_SEX_VAL_STR   2

Function Documentation

◆ rec_sex_compile()

bool rec_sex_compile ( rec_sex_t  sex,
const char *  expr 
)

◆ rec_sex_destroy()

void rec_sex_destroy ( rec_sex_t  sex)

◆ rec_sex_eval()

bool rec_sex_eval ( rec_sex_t  sex,
rec_record_t  record,
bool *  status 
)

◆ rec_sex_eval_str()

char* rec_sex_eval_str ( rec_sex_t  sex,
rec_record_t  record 
)

◆ rec_sex_new()

rec_sex_t rec_sex_new ( bool  case_insensitive)

◆ rec_sex_print_ast()

void rec_sex_print_ast ( rec_sex_t  sex)