qse/ase/awk/rex.h

74 lines
2.0 KiB
C
Raw Normal View History

2006-07-17 06:21:39 +00:00
/*
2006-10-22 12:39:30 +00:00
* $Id: rex.h,v 1.20 2006-10-22 12:39:29 bacon Exp $
2006-07-17 06:21:39 +00:00
**/
2006-10-22 11:34:53 +00:00
#ifndef _SSE_AWK_REX_H_
#define _SSE_AWK_REX_H_
2006-07-17 06:21:39 +00:00
2006-10-22 11:34:53 +00:00
#include <sse/types.h>
#include <sse/macros.h>
2006-07-26 05:19:46 +00:00
2006-07-17 06:21:39 +00:00
2006-07-19 15:58:01 +00:00
/*
2006-10-22 11:34:53 +00:00
* Regular Esseression Syntax
2006-10-22 12:39:30 +00:00
* A regular expression is zero or more branches, separated by '|'.
2006-07-19 15:58:01 +00:00
* ......
* ......
*
2006-10-22 12:39:30 +00:00
* Compiled form of a regular expression:
2006-07-19 15:58:01 +00:00
*
2006-10-22 12:39:30 +00:00
* | expression |
2006-07-20 16:21:54 +00:00
* | header | branch | branch | branch |
* | nb | el | na | bl | cmd | arg | cmd | arg | na | bl | cmd | arg | na | bl | cmd |
2006-07-19 15:58:01 +00:00
*
* nb: the number of branches
2006-10-22 12:39:30 +00:00
* el: the length of a expression including the length of nb and el
2006-07-20 16:21:54 +00:00
* na: the number of atoms
2006-07-26 16:43:35 +00:00
* bl: the length of a branch including the length of na and bl
2006-07-19 15:58:01 +00:00
* cmd: The command and repetition info encoded together.
* Some commands require an argument to follow them but some other don't.
* It is encoded as follows:
*
2006-10-22 12:39:30 +00:00
* Subexpressions can be nested by having the command "GROUP"
* and a subexpression as its argument.
2006-07-19 15:58:01 +00:00
*
* Examples:
* a.c -> |1|6|5|ORD_CHAR(no bound)|a|ANY_CHAR(no bound)|ORD_CHAR(no bound)|c|
* ab|xy -> |2|10|4|ORD_CHAR(no bound)|a|ORD_CHAR(no bound)|b|4|ORD_CHAR(no bound)|x|ORD_CHAR(no bound)|y|
*/
2006-10-22 11:34:53 +00:00
#define SSE_AWK_REX_NA(code) (*(sse_size_t*)(code))
2006-07-26 05:19:46 +00:00
2006-10-22 11:34:53 +00:00
#define SSE_AWK_REX_LEN(code) \
(*(sse_size_t*)((sse_byte_t*)(code)+sse_sizeof(sse_size_t)))
2006-07-26 05:19:46 +00:00
2006-10-22 11:34:53 +00:00
enum sse_awk_rex_option_t
2006-09-10 15:50:34 +00:00
{
2006-10-22 11:34:53 +00:00
SSE_AWK_REX_IGNORECASE = (1 << 0)
2006-09-10 15:50:34 +00:00
};
2006-07-17 06:21:39 +00:00
#ifdef __cplusplus
extern "C" {
#endif
2006-10-22 11:34:53 +00:00
void* sse_awk_buildrex (
sse_awk_t* awk, const sse_char_t* ptn,
sse_size_t len, int* errnum);
2006-07-24 11:58:55 +00:00
2006-10-22 11:34:53 +00:00
int sse_awk_matchrex (
sse_awk_t* awk, void* code, int option,
const sse_char_t* str, sse_size_t len,
const sse_char_t** match_ptr, sse_size_t* match_len, int* errnum);
2006-07-24 11:58:55 +00:00
2006-10-22 11:34:53 +00:00
void sse_awk_freerex (sse_awk_t* awk, void* code);
2006-08-16 11:35:54 +00:00
2006-10-22 11:34:53 +00:00
sse_bool_t sse_awk_isemptyrex (sse_awk_t* awk, void* code);
2006-08-30 07:15:14 +00:00
2006-10-22 11:34:53 +00:00
void sse_awk_printrex (void* code);
2006-07-24 16:23:19 +00:00
2006-07-17 06:21:39 +00:00
#ifdef __cplusplus
}
#endif
#endif