*** empty log message ***
This commit is contained in:
parent
46a2b28e62
commit
a2c471a8a6
@ -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>
|
||||
@ -30,7 +30,6 @@ enum
|
||||
TOKEN_LT,
|
||||
TOKEN_GE,
|
||||
TOKEN_GT,
|
||||
TOKEN_MA, /* match */
|
||||
TOKEN_NM, /* not match */
|
||||
TOKEN_NOT,
|
||||
TOKEN_PLUS,
|
||||
@ -45,7 +44,7 @@ enum
|
||||
TOKEN_BOR,
|
||||
TOKEN_BXOR,
|
||||
TOKEN_BAND,
|
||||
TOKEN_BNOT,
|
||||
TOKEN_TILDE, /* used for unary bitwise-not and regex match */
|
||||
TOKEN_RSHIFT,
|
||||
TOKEN_LSHIFT,
|
||||
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_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_xor (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 }
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -1354,7 +1366,7 @@ static xp_awk_nde_t* __parse_unary (xp_awk_t* awk)
|
||||
opcode = (MATCH(awk,TOKEN_PLUS))? XP_AWK_UNROP_PLUS:
|
||||
(MATCH(awk,TOKEN_MINUS))? XP_AWK_UNROP_MINUS:
|
||||
(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);
|
||||
|
||||
@ -2311,10 +2323,10 @@ static int __get_token (xp_awk_t* awk)
|
||||
ADD_TOKEN_STR (awk, XP_TEXT("!="));
|
||||
GET_CHAR_TO (awk, c);
|
||||
}
|
||||
else if (c == XP_CHAR('@'))
|
||||
else if (c == XP_CHAR('~'))
|
||||
{
|
||||
SET_TOKEN_TYPE (awk, TOKEN_NM);
|
||||
ADD_TOKEN_STR (awk, XP_TEXT("!="));
|
||||
ADD_TOKEN_STR (awk, XP_TEXT("!~"));
|
||||
GET_CHAR_TO (awk, c);
|
||||
}
|
||||
else
|
||||
@ -2397,7 +2409,7 @@ static int __get_token (xp_awk_t* awk)
|
||||
}
|
||||
else if (c == XP_CHAR('~'))
|
||||
{
|
||||
SET_TOKEN_TYPE (awk, TOKEN_BNOT);
|
||||
SET_TOKEN_TYPE (awk, TOKEN_TILDE);
|
||||
ADD_TOKEN_CHAR (awk, c);
|
||||
GET_CHAR_TO (awk, c);
|
||||
}
|
||||
@ -2407,12 +2419,6 @@ static int __get_token (xp_awk_t* awk)
|
||||
ADD_TOKEN_CHAR (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('+'))
|
||||
{
|
||||
GET_CHAR_TO (awk, c);
|
||||
|
@ -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>
|
||||
@ -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);
|
||||
static xp_awk_val_t* __eval_binop_exp (
|
||||
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_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_div,
|
||||
__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_val_t* left, * right, * res;
|
||||
@ -1528,6 +1535,22 @@ static xp_awk_val_t* __eval_binop_exp (
|
||||
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)
|
||||
{
|
||||
xp_awk_val_t* left, * res = XP_NULL;
|
||||
|
@ -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_
|
||||
@ -44,7 +44,10 @@ enum
|
||||
XP_AWK_BINOP_MUL,
|
||||
XP_AWK_BINOP_DIV,
|
||||
XP_AWK_BINOP_MOD,
|
||||
XP_AWK_BINOP_EXP
|
||||
XP_AWK_BINOP_EXP,
|
||||
|
||||
XP_AWK_BINOP_MA,
|
||||
XP_AWK_BINOP_NM
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -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>
|
||||
@ -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("!~")
|
||||
|
||||
};
|
||||
|
||||
static const xp_char_t* __unrop_str[] =
|
||||
|
Loading…
Reference in New Issue
Block a user