*** empty log message ***
This commit is contained in:
		
							
								
								
									
										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>
 | 
			
		||||
@ -25,10 +25,10 @@ enum
 | 
			
		||||
	TOKEN_GT,
 | 
			
		||||
	TOKEN_NOT,
 | 
			
		||||
	TOKEN_PLUS,
 | 
			
		||||
	TOKEN_PLUS_PLUS,
 | 
			
		||||
	TOKEN_PLUSPLUS,
 | 
			
		||||
	TOKEN_PLUS_ASSIGN,
 | 
			
		||||
	TOKEN_MINUS,
 | 
			
		||||
	TOKEN_MINUS_MINUS,
 | 
			
		||||
	TOKEN_MINUSMINUS,
 | 
			
		||||
	TOKEN_MINUS_ASSIGN,
 | 
			
		||||
	TOKEN_MUL,
 | 
			
		||||
	TOKEN_DIV,
 | 
			
		||||
@ -40,6 +40,7 @@ enum
 | 
			
		||||
	TOKEN_BOR,
 | 
			
		||||
	TOKEN_BXOR,
 | 
			
		||||
	TOKEN_BAND,
 | 
			
		||||
	TOKEN_BNOT,
 | 
			
		||||
 | 
			
		||||
	TOKEN_LPAREN,
 | 
			
		||||
	TOKEN_RPAREN,
 | 
			
		||||
@ -52,7 +53,8 @@ enum
 | 
			
		||||
	TOKEN_COMMA,
 | 
			
		||||
	TOKEN_SEMICOLON,
 | 
			
		||||
 | 
			
		||||
	TOKEN_INTEGER,
 | 
			
		||||
	TOKEN_INT,
 | 
			
		||||
	TOKEN_REAL,
 | 
			
		||||
	TOKEN_STRING,
 | 
			
		||||
	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_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);
 | 
			
		||||
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_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 (!MATCH(awk,TOKEN_ASSIGN)) return x;
 | 
			
		||||
 | 
			
		||||
//TODO: PLUS_ASSIGN, MINUS_ASSIGN, ....
 | 
			
		||||
//
 | 
			
		||||
	xp_assert (x->next == XP_NULL);
 | 
			
		||||
	if (x->type != XP_AWK_NDE_ARG &&
 | 
			
		||||
	    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 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
{
 | 
			
		||||
	xp_awk_nde_exp_t* nde;
 | 
			
		||||
	xp_awk_nde_t* left, * right;
 | 
			
		||||
	int opcode;
 | 
			
		||||
 | 
			
		||||
	left = __parse_shift (awk);
 | 
			
		||||
	if (left == XP_NULL) return XP_NULL;
 | 
			
		||||
	
 | 
			
		||||
	while (1) 
 | 
			
		||||
	__binmap_t map[] = 
 | 
			
		||||
	{
 | 
			
		||||
		if (MATCH(awk,TOKEN_GT)) opcode = XP_AWK_BINOP_GT;
 | 
			
		||||
		else if (MATCH(awk,TOKEN_GE)) opcode = XP_AWK_BINOP_GE;
 | 
			
		||||
		else if (MATCH(awk,TOKEN_LT)) opcode = XP_AWK_BINOP_LT;
 | 
			
		||||
		else if (MATCH(awk,TOKEN_LE)) opcode = XP_AWK_BINOP_LE;
 | 
			
		||||
		else break;
 | 
			
		||||
		{ TOKEN_GT, XP_AWK_BINOP_GT },
 | 
			
		||||
		{ TOKEN_GE, XP_AWK_BINOP_GE },
 | 
			
		||||
		{ TOKEN_LT, XP_AWK_BINOP_LT },
 | 
			
		||||
		{ TOKEN_LE, XP_AWK_BINOP_LE },
 | 
			
		||||
		{ TOKEN_EOF, 0 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
		if (__get_token(awk) == -1) 
 | 
			
		||||
		{
 | 
			
		||||
			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;
 | 
			
		||||
	return __parse_binary_expr (awk, map, __parse_shift);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static xp_awk_nde_t* __parse_shift (xp_awk_t* awk)
 | 
			
		||||
{
 | 
			
		||||
	xp_awk_nde_exp_t* nde;
 | 
			
		||||
	xp_awk_nde_t* left, * right;
 | 
			
		||||
	int opcode;
 | 
			
		||||
 | 
			
		||||
	left = __parse_additive (awk);
 | 
			
		||||
	if (left == XP_NULL) return XP_NULL;
 | 
			
		||||
	
 | 
			
		||||
	while (1) 
 | 
			
		||||
	__binmap_t map[] = 
 | 
			
		||||
	{
 | 
			
		||||
		if (MATCH(awk,TOKEN_RSHIFT)) opcode = XP_AWK_BINOP_RSHIFT;
 | 
			
		||||
		else if (MATCH(awk,TOKEN_LSHIFT)) opcode = XP_AWK_BINOP_LSHIFT;
 | 
			
		||||
		else break;
 | 
			
		||||
		{ TOKEN_LSHIFT, XP_AWK_BINOP_LSHIFT },
 | 
			
		||||
		{ TOKEN_RSHIFT, XP_AWK_BINOP_RSHIFT },
 | 
			
		||||
		{ TOKEN_EOF, 0 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
		if (__get_token(awk) == -1) 
 | 
			
		||||
		{
 | 
			
		||||
			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;
 | 
			
		||||
	return __parse_binary_expr (awk, map, __parse_additive);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static xp_awk_nde_t* __parse_additive (xp_awk_t* awk)
 | 
			
		||||
{
 | 
			
		||||
	xp_awk_nde_exp_t* nde;
 | 
			
		||||
	xp_awk_nde_t* left, * right;
 | 
			
		||||
	int opcode;
 | 
			
		||||
 | 
			
		||||
	left = __parse_multiplicative (awk);
 | 
			
		||||
	if (left == XP_NULL) return XP_NULL;
 | 
			
		||||
	
 | 
			
		||||
	while (1) 
 | 
			
		||||
	__binmap_t map[] = 
 | 
			
		||||
	{
 | 
			
		||||
		if (MATCH(awk,TOKEN_PLUS)) opcode = XP_AWK_BINOP_PLUS;
 | 
			
		||||
		else if (MATCH(awk,TOKEN_MINUS)) opcode = XP_AWK_BINOP_MINUS;
 | 
			
		||||
		else break;
 | 
			
		||||
		{ TOKEN_PLUS, XP_AWK_BINOP_PLUS },
 | 
			
		||||
		{ TOKEN_MINUS, XP_AWK_BINOP_MINUS },
 | 
			
		||||
		{ TOKEN_EOF, 0 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
		if (__get_token(awk) == -1) 
 | 
			
		||||
		{
 | 
			
		||||
			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;
 | 
			
		||||
	return __parse_binary_expr (awk, map, __parse_multiplicative);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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_t* left, * right;
 | 
			
		||||
	int opcode;
 | 
			
		||||
@ -1396,10 +1308,20 @@ static xp_awk_nde_t* __parse_multiplicative (xp_awk_t* awk)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return left;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1500,7 +1422,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
 | 
			
		||||
			PANIC (awk, XP_AWK_EUNDEF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else if (MATCH(awk,TOKEN_INTEGER)) 
 | 
			
		||||
	else if (MATCH(awk,TOKEN_INT)) 
 | 
			
		||||
	{
 | 
			
		||||
		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;
 | 
			
		||||
	}
 | 
			
		||||
	/* TODO: floating point number */
 | 
			
		||||
	/*
 | 
			
		||||
	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))  {
 | 
			
		||||
		xp_awk_nde_str_t* nde;
 | 
			
		||||
 | 
			
		||||
@ -2190,7 +2130,7 @@ static int __get_token (xp_awk_t* awk)
 | 
			
		||||
			GET_CHAR_TO (awk, c);
 | 
			
		||||
		} while (xp_isdigit(c));
 | 
			
		||||
 | 
			
		||||
		SET_TOKEN_TYPE (awk, TOKEN_INTEGER);
 | 
			
		||||
		SET_TOKEN_TYPE (awk, TOKEN_INT);
 | 
			
		||||
// TODO: enhance nubmer handling
 | 
			
		||||
	}
 | 
			
		||||
	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("&"));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	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('+')) 
 | 
			
		||||
	{
 | 
			
		||||
		GET_CHAR_TO (awk, c);
 | 
			
		||||
		if (c == XP_CHAR('+')) 
 | 
			
		||||
		{
 | 
			
		||||
			SET_TOKEN_TYPE (awk, TOKEN_PLUS_PLUS);
 | 
			
		||||
			SET_TOKEN_TYPE (awk, TOKEN_PLUSPLUS);
 | 
			
		||||
			ADD_TOKEN_STR (awk, XP_TEXT("++"));
 | 
			
		||||
			GET_CHAR_TO (awk, c);
 | 
			
		||||
		}
 | 
			
		||||
@ -2354,7 +2300,7 @@ static int __get_token (xp_awk_t* awk)
 | 
			
		||||
		GET_CHAR_TO (awk, c);
 | 
			
		||||
		if (c == XP_CHAR('-')) 
 | 
			
		||||
		{
 | 
			
		||||
			SET_TOKEN_TYPE (awk, TOKEN_MINUS_MINUS);
 | 
			
		||||
			SET_TOKEN_TYPE (awk, TOKEN_MINUSMINUS);
 | 
			
		||||
			ADD_TOKEN_STR (awk, XP_TEXT("--"));
 | 
			
		||||
			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_
 | 
			
		||||
@ -29,19 +29,32 @@ enum
 | 
			
		||||
	XP_AWK_BINOP_BOR,
 | 
			
		||||
	XP_AWK_BINOP_BXOR,
 | 
			
		||||
	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_NE,
 | 
			
		||||
	XP_AWK_BINOP_GT,
 | 
			
		||||
	XP_AWK_BINOP_GE,
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
@ -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>
 | 
			
		||||
@ -66,7 +66,6 @@ int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
xp_long_t xp_strtolong (xp_char_t* str)
 | 
			
		||||
{
 | 
			
		||||
	xp_long_t n = 0;
 | 
			
		||||
@ -80,6 +79,12 @@ xp_long_t xp_strtolong (xp_char_t* str)
 | 
			
		||||
	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, ...)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -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_
 | 
			
		||||
@ -141,6 +141,7 @@ xp_size_t xp_strxncpy (
 | 
			
		||||
 | 
			
		||||
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2);
 | 
			
		||||
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_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>
 | 
			
		||||
@ -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("%")
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user