initial start on compile functionality

This commit is contained in:
Josh Holtrop 2019-10-29 15:12:02 -04:00
parent 98f30d6f02
commit 1dcc704758
2 changed files with 80 additions and 4 deletions

65
src/jairee.c Normal file
View 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);
}

View File

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