mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-30 11:40:32 +00:00
57 lines
799 B
C
57 lines
799 B
C
#ifndef PARSER_H
|
|
#define PARSER_H
|
|
|
|
#include <setjmp.h>
|
|
|
|
#include "lexer.h"
|
|
|
|
#define PR_MAX_FIELDS 64
|
|
|
|
enum
|
|
{
|
|
PR_UNTERMINATED_STRING = -1,
|
|
PR_INVALID_CHARACTER = -2,
|
|
PR_UNEXPECTED_TOKEN = -3,
|
|
PR_OUT_OF_MEMORY = -4,
|
|
};
|
|
|
|
typedef struct pr_key_t pr_key_t;
|
|
|
|
struct pr_key_t
|
|
{
|
|
lx_string_t key;
|
|
const pr_key_t* prev;
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
pr_key_t key;
|
|
lx_string_t value;
|
|
}
|
|
pr_pair_t;
|
|
|
|
typedef struct pr_node_t pr_node_t;
|
|
|
|
struct pr_node_t
|
|
{
|
|
pr_pair_t pairs[ PR_MAX_FIELDS ];
|
|
unsigned count;
|
|
pr_node_t* next;
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
lx_state_t lexer;
|
|
pr_node_t* node;
|
|
pr_node_t* first;
|
|
pr_node_t** prev;
|
|
jmp_buf env;
|
|
}
|
|
pr_state_t;
|
|
|
|
void pr_new( pr_state_t* parser, const char* source, unsigned srclen );
|
|
int pr_parse( pr_state_t* parser );
|
|
|
|
#endif /* PARSER_H */
|
|
|