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 <stdint.h>
|
||||||
#include <stdlib.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 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 {
|
typedef struct jairee_match_s {
|
||||||
size_t start;
|
size_t start;
|
||||||
@ -17,13 +20,13 @@ typedef struct jairee_match_s {
|
|||||||
} jairee_match_t;
|
} jairee_match_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void * str;
|
const void * str;
|
||||||
size_t len;
|
size_t len;
|
||||||
jairee_decode_t decode;
|
jairee_decode_t decode;
|
||||||
} jairee_string_t;
|
} jairee_string_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
size_t todo;
|
size_t error;
|
||||||
} jairee_re_t;
|
} jairee_re_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -32,6 +35,9 @@ typedef struct {
|
|||||||
|
|
||||||
jairee_re_t * jairee_compile(jairee_string_t * exp);
|
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_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);
|
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_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);
|
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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user