initial start on compile functionality
This commit is contained in:
parent
98f30d6f02
commit
1dcc704758
65
src/jairee.c
Normal file
65
src/jairee.c
Normal file
@ -0,0 +1,65 @@
|
||||
#include "jairee.h"
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define NODE_TYPE_ACCEPT_ONE 0u
|
||||
#define NODE_TYPE_ACCEPT_RANGE 1u
|
||||
|
||||
typedef struct {
|
||||
jairee_cp_t cp1;
|
||||
jairee_cp_t cp2;
|
||||
size_t type;
|
||||
} node_t;
|
||||
|
||||
bool jairee_compile_add_cp(jairee_re_t * re, jairee_cp_t cp)
|
||||
{
|
||||
}
|
||||
|
||||
jairee_re_t * jairee_compile(jairee_string_t * rs)
|
||||
{
|
||||
jairee_re_t * re = (jairee_re_t *)malloc(sizeof(jairee_re_t));
|
||||
re->error = 0u;
|
||||
|
||||
size_t offset = 0u;
|
||||
while (offset < rs->len)
|
||||
{
|
||||
jairee_cp_t cp = rs->decode(rs->str, &offset);
|
||||
if (cp == JAIREE_DECODE_ERROR)
|
||||
{
|
||||
re->error |= JAIREE_ERR_DECODE;
|
||||
break;
|
||||
}
|
||||
if (!jairee_compile_add_cp(re, cp))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return re;
|
||||
}
|
||||
|
||||
void jairee_free_re(jairee_re_t * re)
|
||||
{
|
||||
free(re);
|
||||
}
|
||||
|
||||
static jairee_cp_t decode_ascii(const void * s, size_t * offset)
|
||||
{
|
||||
jairee_cp_t cp = (jairee_cp_t)((const char *)s)[*offset];
|
||||
(*offset)++;
|
||||
return cp;
|
||||
}
|
||||
|
||||
jairee_string_t * jairee_string_from_asciiz(const char * s)
|
||||
{
|
||||
jairee_string_t * js = (jairee_string_t *)malloc(sizeof(jairee_string_t));
|
||||
js->str = s;
|
||||
js->len = strlen(s);
|
||||
js->decode = decode_ascii;
|
||||
return js;
|
||||
}
|
||||
|
||||
void jairee_free_string(jairee_string_t * str)
|
||||
{
|
||||
free(str);
|
||||
}
|
19
src/jairee.h
19
src/jairee.h
@ -4,11 +4,14 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define JAIREE_DECODE_ERROR 0xFEFEFEFFu
|
||||
#define JAIREE_DECODE_ERROR 0xFEFEFE00u
|
||||
|
||||
#define JAIREE_ERR_DECODE 0x1u
|
||||
#define JAIREE_ERR_COMPILE 0x2u
|
||||
|
||||
typedef uint32_t jairee_cp_t;
|
||||
|
||||
typedef jairee_cp_t (*jairee_decode_t)(void * str, size_t offset);
|
||||
typedef jairee_cp_t (*jairee_decode_t)(const void * str, size_t * offset);
|
||||
|
||||
typedef struct jairee_match_s {
|
||||
size_t start;
|
||||
@ -17,13 +20,13 @@ typedef struct jairee_match_s {
|
||||
} jairee_match_t;
|
||||
|
||||
typedef struct {
|
||||
void * str;
|
||||
const void * str;
|
||||
size_t len;
|
||||
jairee_decode_t decode;
|
||||
} jairee_string_t;
|
||||
|
||||
typedef struct {
|
||||
size_t todo;
|
||||
size_t error;
|
||||
} jairee_re_t;
|
||||
|
||||
typedef struct {
|
||||
@ -32,6 +35,9 @@ typedef struct {
|
||||
|
||||
jairee_re_t * jairee_compile(jairee_string_t * exp);
|
||||
|
||||
void jairee_free_re(jairee_re_t * re);
|
||||
|
||||
#if 0
|
||||
jairee_match_t * jairee_match(jairee_string_t * str, size_t start_offset, jairee_string_t * exp);
|
||||
|
||||
jairee_match_t * jairee_matchc(jairee_string_t * str, size_t start_offset, jairee_re_t * re);
|
||||
@ -41,5 +47,10 @@ jairee_state_t * jairee_start(jairee_string_t * str, size_t start_offset, jairee
|
||||
jairee_state_t * jairee_startc(jairee_string_t * str, size_t start_offset, jairee_re_t * re, jairee_match_t ** match);
|
||||
|
||||
jairee_status_t jairee_step(jairee_state_t * state, size_t timeout);
|
||||
#endif
|
||||
|
||||
jairee_string_t * jairee_string_from_asciiz(const char * s);
|
||||
|
||||
void jairee_free_string(jairee_string_t * str);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user