*** 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>
|
#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);
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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[] =
|
||||||
|
Loading…
Reference in New Issue
Block a user