*** empty log message ***
This commit is contained in:
parent
09f24d5585
commit
c4a54c070c
236
ase/awk/parse.c
236
ase/awk/parse.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.65 2006-03-30 16:38:51 bacon Exp $
|
* $Id: parse.c,v 1.66 2006-03-31 12:04:14 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk.h>
|
#include <xp/awk/awk.h>
|
||||||
@ -25,10 +25,10 @@ enum
|
|||||||
TOKEN_GT,
|
TOKEN_GT,
|
||||||
TOKEN_NOT,
|
TOKEN_NOT,
|
||||||
TOKEN_PLUS,
|
TOKEN_PLUS,
|
||||||
TOKEN_PLUS_PLUS,
|
TOKEN_PLUSPLUS,
|
||||||
TOKEN_PLUS_ASSIGN,
|
TOKEN_PLUS_ASSIGN,
|
||||||
TOKEN_MINUS,
|
TOKEN_MINUS,
|
||||||
TOKEN_MINUS_MINUS,
|
TOKEN_MINUSMINUS,
|
||||||
TOKEN_MINUS_ASSIGN,
|
TOKEN_MINUS_ASSIGN,
|
||||||
TOKEN_MUL,
|
TOKEN_MUL,
|
||||||
TOKEN_DIV,
|
TOKEN_DIV,
|
||||||
@ -40,6 +40,7 @@ enum
|
|||||||
TOKEN_BOR,
|
TOKEN_BOR,
|
||||||
TOKEN_BXOR,
|
TOKEN_BXOR,
|
||||||
TOKEN_BAND,
|
TOKEN_BAND,
|
||||||
|
TOKEN_BNOT,
|
||||||
|
|
||||||
TOKEN_LPAREN,
|
TOKEN_LPAREN,
|
||||||
TOKEN_RPAREN,
|
TOKEN_RPAREN,
|
||||||
@ -52,7 +53,8 @@ enum
|
|||||||
TOKEN_COMMA,
|
TOKEN_COMMA,
|
||||||
TOKEN_SEMICOLON,
|
TOKEN_SEMICOLON,
|
||||||
|
|
||||||
TOKEN_INTEGER,
|
TOKEN_INT,
|
||||||
|
TOKEN_REAL,
|
||||||
TOKEN_STRING,
|
TOKEN_STRING,
|
||||||
TOKEN_REGEX,
|
TOKEN_REGEX,
|
||||||
|
|
||||||
@ -117,6 +119,7 @@ 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_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_equality (xp_awk_t* awk);
|
static xp_awk_nde_t* __parse_equality (xp_awk_t* awk);
|
||||||
static xp_awk_nde_t* __parse_relational (xp_awk_t* awk);
|
static xp_awk_nde_t* __parse_relational (xp_awk_t* awk);
|
||||||
static xp_awk_nde_t* __parse_shift (xp_awk_t* awk);
|
static xp_awk_nde_t* __parse_shift (xp_awk_t* awk);
|
||||||
@ -998,6 +1001,8 @@ static xp_awk_nde_t* __parse_expression (xp_awk_t* awk)
|
|||||||
if (x == XP_NULL) return XP_NULL;
|
if (x == XP_NULL) return XP_NULL;
|
||||||
if (!MATCH(awk,TOKEN_ASSIGN)) return x;
|
if (!MATCH(awk,TOKEN_ASSIGN)) return x;
|
||||||
|
|
||||||
|
//TODO: PLUS_ASSIGN, MINUS_ASSIGN, ....
|
||||||
|
//
|
||||||
xp_assert (x->next == XP_NULL);
|
xp_assert (x->next == XP_NULL);
|
||||||
if (x->type != XP_AWK_NDE_ARG &&
|
if (x->type != XP_AWK_NDE_ARG &&
|
||||||
x->type != XP_AWK_NDE_ARGIDX &&
|
x->type != XP_AWK_NDE_ARGIDX &&
|
||||||
@ -1151,6 +1156,17 @@ static xp_awk_nde_t* __parse_bitwise_xor (xp_awk_t* awk)
|
|||||||
{ TOKEN_EOF, 0 }
|
{ TOKEN_EOF, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return __parse_binary_expr (awk, map, __parse_bitwise_and);
|
||||||
|
}
|
||||||
|
|
||||||
|
static xp_awk_nde_t* __parse_bitwise_and (xp_awk_t* awk)
|
||||||
|
{
|
||||||
|
__binmap_t map[] =
|
||||||
|
{
|
||||||
|
{ TOKEN_BAND, XP_AWK_BINOP_BAND },
|
||||||
|
{ TOKEN_EOF, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
return __parse_binary_expr (awk, map, __parse_equality);
|
return __parse_binary_expr (awk, map, __parse_equality);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,158 +1184,54 @@ static xp_awk_nde_t* __parse_equality (xp_awk_t* awk)
|
|||||||
|
|
||||||
static xp_awk_nde_t* __parse_relational (xp_awk_t* awk)
|
static xp_awk_nde_t* __parse_relational (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
xp_awk_nde_exp_t* nde;
|
__binmap_t map[] =
|
||||||
xp_awk_nde_t* left, * right;
|
|
||||||
int opcode;
|
|
||||||
|
|
||||||
left = __parse_shift (awk);
|
|
||||||
if (left == XP_NULL) return XP_NULL;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
{
|
||||||
if (MATCH(awk,TOKEN_GT)) opcode = XP_AWK_BINOP_GT;
|
{ TOKEN_GT, XP_AWK_BINOP_GT },
|
||||||
else if (MATCH(awk,TOKEN_GE)) opcode = XP_AWK_BINOP_GE;
|
{ TOKEN_GE, XP_AWK_BINOP_GE },
|
||||||
else if (MATCH(awk,TOKEN_LT)) opcode = XP_AWK_BINOP_LT;
|
{ TOKEN_LT, XP_AWK_BINOP_LT },
|
||||||
else if (MATCH(awk,TOKEN_LE)) opcode = XP_AWK_BINOP_LE;
|
{ TOKEN_LE, XP_AWK_BINOP_LE },
|
||||||
else break;
|
{ TOKEN_EOF, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
return __parse_binary_expr (awk, map, __parse_shift);
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
right = __parse_shift (awk);
|
|
||||||
if (right == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: constant folding -> in other parts of the program also...
|
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*)xp_malloc(xp_sizeof(xp_awk_nde_exp_t));
|
|
||||||
if (nde == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (right);
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
nde->type = XP_AWK_NDE_EXP_BIN;
|
|
||||||
nde->next = XP_NULL;
|
|
||||||
nde->opcode = opcode;
|
|
||||||
nde->left = left;
|
|
||||||
nde->right = right;
|
|
||||||
|
|
||||||
left = (xp_awk_nde_t*)nde;
|
|
||||||
}
|
|
||||||
|
|
||||||
return left;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_awk_nde_t* __parse_shift (xp_awk_t* awk)
|
static xp_awk_nde_t* __parse_shift (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
xp_awk_nde_exp_t* nde;
|
__binmap_t map[] =
|
||||||
xp_awk_nde_t* left, * right;
|
|
||||||
int opcode;
|
|
||||||
|
|
||||||
left = __parse_additive (awk);
|
|
||||||
if (left == XP_NULL) return XP_NULL;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
{
|
||||||
if (MATCH(awk,TOKEN_RSHIFT)) opcode = XP_AWK_BINOP_RSHIFT;
|
{ TOKEN_LSHIFT, XP_AWK_BINOP_LSHIFT },
|
||||||
else if (MATCH(awk,TOKEN_LSHIFT)) opcode = XP_AWK_BINOP_LSHIFT;
|
{ TOKEN_RSHIFT, XP_AWK_BINOP_RSHIFT },
|
||||||
else break;
|
{ TOKEN_EOF, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
return __parse_binary_expr (awk, map, __parse_additive);
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
right = __parse_additive (awk);
|
|
||||||
if (right == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: constant folding -> in other parts of the program also...
|
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*)xp_malloc(xp_sizeof(xp_awk_nde_exp_t));
|
|
||||||
if (nde == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (right);
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
nde->type = XP_AWK_NDE_EXP_BIN;
|
|
||||||
nde->next = XP_NULL;
|
|
||||||
nde->opcode = opcode;
|
|
||||||
nde->left = left;
|
|
||||||
nde->right = right;
|
|
||||||
|
|
||||||
left = (xp_awk_nde_t*)nde;
|
|
||||||
}
|
|
||||||
|
|
||||||
return left;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_awk_nde_t* __parse_additive (xp_awk_t* awk)
|
static xp_awk_nde_t* __parse_additive (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
xp_awk_nde_exp_t* nde;
|
__binmap_t map[] =
|
||||||
xp_awk_nde_t* left, * right;
|
|
||||||
int opcode;
|
|
||||||
|
|
||||||
left = __parse_multiplicative (awk);
|
|
||||||
if (left == XP_NULL) return XP_NULL;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
{
|
||||||
if (MATCH(awk,TOKEN_PLUS)) opcode = XP_AWK_BINOP_PLUS;
|
{ TOKEN_PLUS, XP_AWK_BINOP_PLUS },
|
||||||
else if (MATCH(awk,TOKEN_MINUS)) opcode = XP_AWK_BINOP_MINUS;
|
{ TOKEN_MINUS, XP_AWK_BINOP_MINUS },
|
||||||
else break;
|
{ TOKEN_EOF, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
return __parse_binary_expr (awk, map, __parse_multiplicative);
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
right = __parse_multiplicative (awk);
|
|
||||||
if (right == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: constant folding -> in other parts of the program also...
|
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*)xp_malloc(xp_sizeof(xp_awk_nde_exp_t));
|
|
||||||
if (nde == XP_NULL)
|
|
||||||
{
|
|
||||||
xp_awk_clrpt (right);
|
|
||||||
xp_awk_clrpt (left);
|
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
nde->type = XP_AWK_NDE_EXP_BIN;
|
|
||||||
nde->next = XP_NULL;
|
|
||||||
nde->opcode = opcode;
|
|
||||||
nde->left = left;
|
|
||||||
nde->right = right;
|
|
||||||
|
|
||||||
left = (xp_awk_nde_t*)nde;
|
|
||||||
}
|
|
||||||
|
|
||||||
return left;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_awk_nde_t* __parse_multiplicative (xp_awk_t* awk)
|
static xp_awk_nde_t* __parse_multiplicative (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
|
__binmap_t map[] =
|
||||||
|
{
|
||||||
|
{ TOKEN_MUL, XP_AWK_BINOP_MUL },
|
||||||
|
{ TOKEN_DIV, XP_AWK_BINOP_DIV },
|
||||||
|
{ TOKEN_MOD, XP_AWK_BINOP_MOD },
|
||||||
|
{ TOKEN_EOF, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
return __parse_binary_expr (awk, map, __parse_unary);
|
||||||
|
#if 0
|
||||||
xp_awk_nde_exp_t* nde;
|
xp_awk_nde_exp_t* nde;
|
||||||
xp_awk_nde_t* left, * right;
|
xp_awk_nde_t* left, * right;
|
||||||
int opcode;
|
int opcode;
|
||||||
@ -1396,10 +1308,20 @@ static xp_awk_nde_t* __parse_multiplicative (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return left;
|
return left;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_awk_nde_t* __parse_unary (xp_awk_t* awk)
|
static xp_awk_nde_t* __parse_unary (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
|
// TOKEN_PLUS_PLUS, TOKEN_MINUS_MINUS
|
||||||
|
//TODO:
|
||||||
|
/*
|
||||||
|
while (MATCH(awk,TOKEN_PLUS) || MATCH(awk,TOKEN_MINUS) ||
|
||||||
|
MATCH(awk,TOKEN_NOT) || MATCH(awk,TOKEN_BNOT))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return __parse_primary (awk);
|
return __parse_primary (awk);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1500,7 +1422,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_EUNDEF);
|
PANIC (awk, XP_AWK_EUNDEF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOKEN_INTEGER))
|
else if (MATCH(awk,TOKEN_INT))
|
||||||
{
|
{
|
||||||
xp_awk_nde_int_t* nde;
|
xp_awk_nde_int_t* nde;
|
||||||
|
|
||||||
@ -1523,11 +1445,29 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
|
|
||||||
return (xp_awk_nde_t*)nde;
|
return (xp_awk_nde_t*)nde;
|
||||||
}
|
}
|
||||||
/* TODO: floating point number */
|
|
||||||
/*
|
|
||||||
else if (MATCH(awk,TOKEN_REAL)) {
|
else if (MATCH(awk,TOKEN_REAL)) {
|
||||||
|
xp_awk_nde_real_t* nde;
|
||||||
|
|
||||||
|
nde = (xp_awk_nde_real_t*)
|
||||||
|
xp_malloc (xp_sizeof(xp_awk_nde_real_t));
|
||||||
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
|
nde->type = XP_AWK_NDE_REAL;
|
||||||
|
nde->next = XP_NULL;
|
||||||
|
nde->val = xp_strtoreal (XP_STR_BUF(&awk->token.name));
|
||||||
|
|
||||||
|
xp_assert (
|
||||||
|
XP_STR_LEN(&awk->token.name) ==
|
||||||
|
xp_strlen(XP_STR_BUF(&awk->token.name)));
|
||||||
|
|
||||||
|
if (__get_token(awk) == -1)
|
||||||
|
{
|
||||||
|
xp_free (nde);
|
||||||
|
return XP_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (xp_awk_nde_t*)nde;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
else if (MATCH(awk,TOKEN_STRING)) {
|
else if (MATCH(awk,TOKEN_STRING)) {
|
||||||
xp_awk_nde_str_t* nde;
|
xp_awk_nde_str_t* nde;
|
||||||
|
|
||||||
@ -2190,7 +2130,7 @@ static int __get_token (xp_awk_t* awk)
|
|||||||
GET_CHAR_TO (awk, c);
|
GET_CHAR_TO (awk, c);
|
||||||
} while (xp_isdigit(c));
|
} while (xp_isdigit(c));
|
||||||
|
|
||||||
SET_TOKEN_TYPE (awk, TOKEN_INTEGER);
|
SET_TOKEN_TYPE (awk, TOKEN_INT);
|
||||||
// TODO: enhance nubmer handling
|
// TODO: enhance nubmer handling
|
||||||
}
|
}
|
||||||
else if (xp_isalpha(c) || c == XP_CHAR('_'))
|
else if (xp_isalpha(c) || c == XP_CHAR('_'))
|
||||||
@ -2324,12 +2264,18 @@ static int __get_token (xp_awk_t* awk)
|
|||||||
ADD_TOKEN_STR (awk, XP_TEXT("&"));
|
ADD_TOKEN_STR (awk, XP_TEXT("&"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (c == XP_CHAR('~'))
|
||||||
|
{
|
||||||
|
SET_TOKEN_TYPE (awk, TOKEN_BNOT);
|
||||||
|
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);
|
||||||
if (c == XP_CHAR('+'))
|
if (c == XP_CHAR('+'))
|
||||||
{
|
{
|
||||||
SET_TOKEN_TYPE (awk, TOKEN_PLUS_PLUS);
|
SET_TOKEN_TYPE (awk, TOKEN_PLUSPLUS);
|
||||||
ADD_TOKEN_STR (awk, XP_TEXT("++"));
|
ADD_TOKEN_STR (awk, XP_TEXT("++"));
|
||||||
GET_CHAR_TO (awk, c);
|
GET_CHAR_TO (awk, c);
|
||||||
}
|
}
|
||||||
@ -2354,7 +2300,7 @@ static int __get_token (xp_awk_t* awk)
|
|||||||
GET_CHAR_TO (awk, c);
|
GET_CHAR_TO (awk, c);
|
||||||
if (c == XP_CHAR('-'))
|
if (c == XP_CHAR('-'))
|
||||||
{
|
{
|
||||||
SET_TOKEN_TYPE (awk, TOKEN_MINUS_MINUS);
|
SET_TOKEN_TYPE (awk, TOKEN_MINUSMINUS);
|
||||||
ADD_TOKEN_STR (awk, XP_TEXT("--"));
|
ADD_TOKEN_STR (awk, XP_TEXT("--"));
|
||||||
GET_CHAR_TO (awk, c);
|
GET_CHAR_TO (awk, c);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.h,v 1.4 2006-03-30 16:31:50 bacon Exp $
|
* $Id: run.h,v 1.5 2006-03-31 12:04:14 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_RUN_H_
|
#ifndef _XP_AWK_RUN_H_
|
||||||
@ -29,19 +29,32 @@ enum
|
|||||||
XP_AWK_BINOP_BOR,
|
XP_AWK_BINOP_BOR,
|
||||||
XP_AWK_BINOP_BXOR,
|
XP_AWK_BINOP_BXOR,
|
||||||
XP_AWK_BINOP_BAND,
|
XP_AWK_BINOP_BAND,
|
||||||
XP_AWK_BINOP_PLUS,
|
|
||||||
XP_AWK_BINOP_MINUS,
|
|
||||||
XP_AWK_BINOP_MUL,
|
|
||||||
XP_AWK_BINOP_DIV,
|
|
||||||
XP_AWK_BINOP_MOD,
|
|
||||||
XP_AWK_BINOP_RSHIFT,
|
|
||||||
XP_AWK_BINOP_LSHIFT,
|
|
||||||
XP_AWK_BINOP_EQ,
|
XP_AWK_BINOP_EQ,
|
||||||
XP_AWK_BINOP_NE,
|
XP_AWK_BINOP_NE,
|
||||||
XP_AWK_BINOP_GT,
|
XP_AWK_BINOP_GT,
|
||||||
XP_AWK_BINOP_GE,
|
XP_AWK_BINOP_GE,
|
||||||
XP_AWK_BINOP_LT,
|
XP_AWK_BINOP_LT,
|
||||||
XP_AWK_BINOP_LE
|
XP_AWK_BINOP_LE,
|
||||||
|
|
||||||
|
XP_AWK_BINOP_LSHIFT,
|
||||||
|
XP_AWK_BINOP_RSHIFT,
|
||||||
|
|
||||||
|
XP_AWK_BINOP_PLUS,
|
||||||
|
XP_AWK_BINOP_MINUS,
|
||||||
|
XP_AWK_BINOP_MUL,
|
||||||
|
XP_AWK_BINOP_DIV,
|
||||||
|
XP_AWK_BINOP_MOD
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
XP_AWK_UNAOP_PLUS,
|
||||||
|
XP_AWK_UNAOP_MINUS,
|
||||||
|
XP_AWK_UNAOP_PLUSPLUS,
|
||||||
|
XP_AWK_UNAOP_MINUSMINUS,
|
||||||
|
XP_AWK_UNAOP_NOT,
|
||||||
|
XP_AWK_UNAOP_BNOT
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sa.c,v 1.11 2006-03-29 16:37:31 bacon Exp $
|
* $Id: sa.c,v 1.12 2006-03-31 12:04:14 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk.h>
|
#include <xp/awk/awk.h>
|
||||||
@ -66,7 +66,6 @@ int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xp_long_t xp_strtolong (xp_char_t* str)
|
xp_long_t xp_strtolong (xp_char_t* str)
|
||||||
{
|
{
|
||||||
xp_long_t n = 0;
|
xp_long_t n = 0;
|
||||||
@ -80,6 +79,12 @@ xp_long_t xp_strtolong (xp_char_t* str)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xp_real_t xp_strtoreal (xp_char_t* str)
|
||||||
|
{
|
||||||
|
/* TODO: */
|
||||||
|
return (xp_real_t)0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int xp_printf (const xp_char_t* fmt, ...)
|
int xp_printf (const xp_char_t* fmt, ...)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sa.h,v 1.15 2006-03-29 16:37:31 bacon Exp $
|
* $Id: sa.h,v 1.16 2006-03-31 12:04:14 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_SA_H_
|
#ifndef _XP_AWK_SA_H_
|
||||||
@ -141,6 +141,7 @@ xp_size_t xp_strxncpy (
|
|||||||
|
|
||||||
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2);
|
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2);
|
||||||
xp_long_t xp_strtolong (xp_char_t* str);
|
xp_long_t xp_strtolong (xp_char_t* str);
|
||||||
|
xp_real_t xp_strtoreal (xp_char_t* str);
|
||||||
|
|
||||||
int xp_printf (const xp_char_t* fmt, ...);
|
int xp_printf (const xp_char_t* fmt, ...);
|
||||||
int xp_vprintf (const xp_char_t* fmt, xp_va_list ap);
|
int xp_vprintf (const xp_char_t* fmt, xp_va_list ap);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tree.c,v 1.28 2006-03-30 16:31:50 bacon Exp $
|
* $Id: tree.c,v 1.29 2006-03-31 12:04:14 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk.h>
|
#include <xp/awk/awk.h>
|
||||||
@ -17,19 +17,32 @@ 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("/"),
|
|
||||||
XP_TEXT("%"),
|
|
||||||
XP_TEXT("<<"),
|
|
||||||
XP_TEXT(">>"),
|
|
||||||
XP_TEXT("=="),
|
XP_TEXT("=="),
|
||||||
XP_TEXT("!="),
|
XP_TEXT("!="),
|
||||||
XP_TEXT(">"),
|
XP_TEXT(">"),
|
||||||
XP_TEXT(">="),
|
XP_TEXT(">="),
|
||||||
XP_TEXT("<"),
|
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* __unaop_str[] =
|
||||||
|
{
|
||||||
|
XP_TEXT("+"),
|
||||||
|
XP_TEXT("-"),
|
||||||
|
XP_TEXT("++"),
|
||||||
|
XP_TEXT("--"),
|
||||||
|
XP_TEXT("!"),
|
||||||
|
XP_TEXT("~")
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __print_tabs (int depth);
|
static void __print_tabs (int depth);
|
||||||
|
Loading…
Reference in New Issue
Block a user