*** empty log message ***

This commit is contained in:
hyung-hwan 2006-04-12 03:54:12 +00:00
parent 46a2b28e62
commit a2c471a8a6
4 changed files with 58 additions and 22 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.78 2006-04-11 15:44:30 bacon Exp $ * $Id: parse.c,v 1.79 2006-04-12 03:54:12 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -30,7 +30,6 @@ enum
TOKEN_LT, TOKEN_LT,
TOKEN_GE, TOKEN_GE,
TOKEN_GT, TOKEN_GT,
TOKEN_MA, /* match */
TOKEN_NM, /* not match */ TOKEN_NM, /* not match */
TOKEN_NOT, TOKEN_NOT,
TOKEN_PLUS, TOKEN_PLUS,
@ -45,7 +44,7 @@ enum
TOKEN_BOR, TOKEN_BOR,
TOKEN_BXOR, TOKEN_BXOR,
TOKEN_BAND, TOKEN_BAND,
TOKEN_BNOT, TOKEN_TILDE, /* used for unary bitwise-not and regex match */
TOKEN_RSHIFT, TOKEN_RSHIFT,
TOKEN_LSHIFT, TOKEN_LSHIFT,
TOKEN_EXP, TOKEN_EXP,
@ -130,6 +129,7 @@ static xp_awk_nde_t* __parse_binary_expr (
static xp_awk_nde_t* __parse_logical_or (xp_awk_t* awk); static xp_awk_nde_t* __parse_logical_or (xp_awk_t* awk);
static xp_awk_nde_t* __parse_logical_and (xp_awk_t* awk); static xp_awk_nde_t* __parse_logical_and (xp_awk_t* awk);
static xp_awk_nde_t* __parse_regex_match (xp_awk_t* awk);
static xp_awk_nde_t* __parse_bitwise_or (xp_awk_t* awk); static xp_awk_nde_t* __parse_bitwise_or (xp_awk_t* awk);
static xp_awk_nde_t* __parse_bitwise_xor (xp_awk_t* awk); static xp_awk_nde_t* __parse_bitwise_xor (xp_awk_t* awk);
static xp_awk_nde_t* __parse_bitwise_and (xp_awk_t* awk); static xp_awk_nde_t* __parse_bitwise_and (xp_awk_t* awk);
@ -1245,6 +1245,18 @@ static xp_awk_nde_t* __parse_logical_and (xp_awk_t* awk)
{ TOKEN_EOF, 0 } { TOKEN_EOF, 0 }
}; };
return __parse_binary_expr (awk, map, __parse_regex_match);
}
static xp_awk_nde_t* __parse_regex_match (xp_awk_t* awk)
{
__binmap_t map[] =
{
{ TOKEN_TILDE, XP_AWK_BINOP_MA },
{ TOKEN_NM, XP_AWK_BINOP_NM },
{ TOKEN_EOF, 0 },
};
return __parse_binary_expr (awk, map, __parse_bitwise_or); return __parse_binary_expr (awk, map, __parse_bitwise_or);
} }
@ -1354,7 +1366,7 @@ static xp_awk_nde_t* __parse_unary (xp_awk_t* awk)
opcode = (MATCH(awk,TOKEN_PLUS))? XP_AWK_UNROP_PLUS: opcode = (MATCH(awk,TOKEN_PLUS))? XP_AWK_UNROP_PLUS:
(MATCH(awk,TOKEN_MINUS))? XP_AWK_UNROP_MINUS: (MATCH(awk,TOKEN_MINUS))? XP_AWK_UNROP_MINUS:
(MATCH(awk,TOKEN_NOT))? XP_AWK_UNROP_NOT: (MATCH(awk,TOKEN_NOT))? XP_AWK_UNROP_NOT:
(MATCH(awk,TOKEN_BNOT))? XP_AWK_UNROP_BNOT: -1; (MATCH(awk,TOKEN_TILDE))? XP_AWK_UNROP_BNOT: -1;
if (opcode == -1) return __parse_increment (awk); if (opcode == -1) return __parse_increment (awk);
@ -2311,10 +2323,10 @@ static int __get_token (xp_awk_t* awk)
ADD_TOKEN_STR (awk, XP_TEXT("!=")); ADD_TOKEN_STR (awk, XP_TEXT("!="));
GET_CHAR_TO (awk, c); GET_CHAR_TO (awk, c);
} }
else if (c == XP_CHAR('@')) else if (c == XP_CHAR('~'))
{ {
SET_TOKEN_TYPE (awk, TOKEN_NM); SET_TOKEN_TYPE (awk, TOKEN_NM);
ADD_TOKEN_STR (awk, XP_TEXT("!=")); ADD_TOKEN_STR (awk, XP_TEXT("!~"));
GET_CHAR_TO (awk, c); GET_CHAR_TO (awk, c);
} }
else else
@ -2397,7 +2409,7 @@ static int __get_token (xp_awk_t* awk)
} }
else if (c == XP_CHAR('~')) else if (c == XP_CHAR('~'))
{ {
SET_TOKEN_TYPE (awk, TOKEN_BNOT); SET_TOKEN_TYPE (awk, TOKEN_TILDE);
ADD_TOKEN_CHAR (awk, c); ADD_TOKEN_CHAR (awk, c);
GET_CHAR_TO (awk, c); GET_CHAR_TO (awk, c);
} }
@ -2407,12 +2419,6 @@ static int __get_token (xp_awk_t* awk)
ADD_TOKEN_CHAR (awk, c); ADD_TOKEN_CHAR (awk, c);
GET_CHAR_TO (awk, c); GET_CHAR_TO (awk, c);
} }
else if (c == XP_CHAR('@'))
{
SET_TOKEN_TYPE (awk, TOKEN_MA);
ADD_TOKEN_CHAR (awk, c);
GET_CHAR_TO (awk, c);
}
else if (c == XP_CHAR('+')) else if (c == XP_CHAR('+'))
{ {
GET_CHAR_TO (awk, c); GET_CHAR_TO (awk, c);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.46 2006-04-11 15:44:30 bacon Exp $ * $Id: run.c,v 1.47 2006-04-12 03:54:12 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -88,6 +88,10 @@ static xp_awk_val_t* __eval_binop_mod (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right); xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right);
static xp_awk_val_t* __eval_binop_exp ( static xp_awk_val_t* __eval_binop_exp (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right); xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right);
static xp_awk_val_t* __eval_binop_ma (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right);
static xp_awk_val_t* __eval_binop_nm (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right);
static xp_awk_val_t* __eval_unary (xp_awk_t* awk, xp_awk_nde_t* nde); static xp_awk_val_t* __eval_unary (xp_awk_t* awk, xp_awk_nde_t* nde);
static xp_awk_val_t* __eval_incpre (xp_awk_t* awk, xp_awk_nde_t* nde); static xp_awk_val_t* __eval_incpre (xp_awk_t* awk, xp_awk_nde_t* nde);
@ -782,7 +786,10 @@ static xp_awk_val_t* __eval_binary (xp_awk_t* awk, xp_awk_nde_t* nde)
__eval_binop_mul, __eval_binop_mul,
__eval_binop_div, __eval_binop_div,
__eval_binop_mod, __eval_binop_mod,
__eval_binop_exp __eval_binop_exp,
__eval_binop_ma,
__eval_binop_nm
}; };
xp_awk_nde_exp_t* exp = (xp_awk_nde_exp_t*)nde; xp_awk_nde_exp_t* exp = (xp_awk_nde_exp_t*)nde;
xp_awk_val_t* left, * right, * res; xp_awk_val_t* left, * right, * res;
@ -1528,6 +1535,22 @@ static xp_awk_val_t* __eval_binop_exp (
return res; return res;
} }
static xp_awk_val_t* __eval_binop_ma (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
{
// TODO: ...
PANIC (awk, XP_AWK_EINTERNAL);
return XP_NULL;
}
static xp_awk_val_t* __eval_binop_nm (
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
{
// TODO: ...
PANIC (awk, XP_AWK_EINTERNAL);
return XP_NULL;
}
static xp_awk_val_t* __eval_unary (xp_awk_t* awk, xp_awk_nde_t* nde) static xp_awk_val_t* __eval_unary (xp_awk_t* awk, xp_awk_nde_t* nde)
{ {
xp_awk_val_t* left, * res = XP_NULL; xp_awk_val_t* left, * res = XP_NULL;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.h,v 1.7 2006-04-11 15:44:30 bacon Exp $ * $Id: run.h,v 1.8 2006-04-12 03:54:12 bacon Exp $
*/ */
#ifndef _XP_AWK_RUN_H_ #ifndef _XP_AWK_RUN_H_
@ -44,7 +44,10 @@ enum
XP_AWK_BINOP_MUL, XP_AWK_BINOP_MUL,
XP_AWK_BINOP_DIV, XP_AWK_BINOP_DIV,
XP_AWK_BINOP_MOD, XP_AWK_BINOP_MOD,
XP_AWK_BINOP_EXP XP_AWK_BINOP_EXP,
XP_AWK_BINOP_MA,
XP_AWK_BINOP_NM
}; };
enum enum

View File

@ -1,5 +1,5 @@
/* /*
* $Id: tree.c,v 1.34 2006-04-11 15:44:30 bacon Exp $ * $Id: tree.c,v 1.35 2006-04-12 03:54:12 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -33,7 +33,11 @@ static const xp_char_t* __binop_str[] =
XP_TEXT("*"), XP_TEXT("*"),
XP_TEXT("/"), XP_TEXT("/"),
XP_TEXT("%"), XP_TEXT("%"),
XP_TEXT("**") XP_TEXT("**"),
XP_TEXT("~"),
XP_TEXT("!~")
}; };
static const xp_char_t* __unrop_str[] = static const xp_char_t* __unrop_str[] =