From ff5b1c802a26789ff769521262db79854b24939b Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Tue, 10 Jan 2012 01:43:10 +1000 Subject: Almost got white space and comments working. Still a bug left somewhere, I think it's in operations ordering. --- LuaSL/src/LuaSL_yaccer.y | 65 ++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 35 deletions(-) (limited to 'LuaSL/src/LuaSL_yaccer.y') diff --git a/LuaSL/src/LuaSL_yaccer.y b/LuaSL/src/LuaSL_yaccer.y index 4b456b1..ed69dd3 100644 --- a/LuaSL/src/LuaSL_yaccer.y +++ b/LuaSL/src/LuaSL_yaccer.y @@ -10,10 +10,9 @@ %define api.pure -%type ignorable -%token LSL_SPACE +%token LSL_SPACE /* Never actually emitted, but we need it in the token table. */ -%type expr +%type expr %left LSL_BOOL_AND %left LSL_BOOL_OR %left LSL_BIT_AND LSL_BIT_XOR LSL_BIT_OR @@ -31,8 +30,8 @@ %right LSL_DECREMENT_PRE LSL_INCREMENT_PRE %token LSL_COMMA -%token LSL_FLOAT -%token LSL_INTEGER +%token LSL_FLOAT +%token LSL_INTEGER %nonassoc LSL_TYPE_FLOAT LSL_TYPE_INTEGER LSL_TYPE_KEY LSL_TYPE_LIST LSL_TYPE_ROTATION LSL_TYPE_STRING LSL_TYPE_VECTOR @@ -42,47 +41,43 @@ %nonassoc LSL_BLOCK_OPEN LSL_BLOCK_CLOSE -%type statement +%type statement %nonassoc LSL_STATEMENT -%type script +%type script %% input : - ignorable - | expr { ((LuaSL_yyparseParam*)data)->ast = addOperation(LSL_EXPRESSION, $1, $1); } + expr { ((LuaSL_yyparseParam*)data)->ast = addOperation(&yylval, LSL_EXPRESSION, $1, $1); } | statement { ((LuaSL_yyparseParam*)data)->ast = addStatement($1, ((LuaSL_yyparseParam*)data)->ast); } | script ; -ignorable : LSL_SPACE { ((LuaSL_yyparseParam*)data)->ast = addSpace($1, ((LuaSL_yyparseParam*)data)->ast); } -; - expr : - expr LSL_BOOL_AND expr { $$ = addOperation( LSL_BOOL_AND, $1, $3 ); } - | expr LSL_BOOL_OR expr { $$ = addOperation( LSL_BOOL_OR, $1, $3 ); } - | expr LSL_BIT_OR expr { $$ = addOperation( LSL_BIT_OR, $1, $3 ); } - | expr LSL_BIT_XOR expr { $$ = addOperation( LSL_BIT_XOR, $1, $3 ); } - | expr LSL_BIT_AND expr { $$ = addOperation( LSL_BIT_AND, $1, $3 ); } - | expr LSL_NOT_EQUAL expr { $$ = addOperation( LSL_NOT_EQUAL, $1, $3 ); } - | expr LSL_EQUAL expr { $$ = addOperation( LSL_EQUAL, $1, $3 ); } - | expr LSL_GREATER_EQUAL expr { $$ = addOperation( LSL_GREATER_EQUAL, $1, $3 ); } - | expr LSL_LESS_EQUAL expr { $$ = addOperation( LSL_LESS_EQUAL, $1, $3 ); } - | expr LSL_GREATER_THAN expr { $$ = addOperation( LSL_GREATER_THAN, $1, $3 ); } - | expr LSL_LESS_THAN expr { $$ = addOperation( LSL_LESS_THAN, $1, $3 ); } - | expr LSL_RIGHT_SHIFT expr { $$ = addOperation( LSL_RIGHT_SHIFT, $1, $3 ); } - | expr LSL_LEFT_SHIFT expr { $$ = addOperation( LSL_LEFT_SHIFT, $1, $3 ); } - | expr LSL_ADD expr { $$ = addOperation( LSL_ADD, $1, $3 ); } - | expr LSL_SUBTRACT expr { $$ = addOperation( LSL_SUBTRACT, $1, $3 ); } - | expr LSL_MULTIPLY expr { $$ = addOperation( LSL_MULTIPLY, $1, $3 ); } - | expr LSL_MODULO expr { $$ = addOperation( LSL_MODULO, $1, $3 ); } - | expr LSL_DIVIDE expr { $$ = addOperation( LSL_DIVIDE, $1, $3 ); } - | LSL_BIT_NOT expr { $$ = addOperation( LSL_BIT_NOT, NULL, $2 ); } - | LSL_BOOL_NOT expr { $$ = addOperation( LSL_BOOL_NOT, NULL, $2 ); } - | LSL_SUBTRACT expr { $$ = addOperation( LSL_NEGATION, NULL, $2 ); } %prec LSL_NEGATION - | LSL_PARENTHESIS_OPEN expr LSL_PARENTHESIS_CLOSE { $$ = addParenthesis($2); } - | LSL_INTEGER { $$ = addInteger($1); } + expr LSL_BOOL_AND expr { $$ = addOperation(&yylval, LSL_BOOL_AND, $1, $3); } + | expr LSL_BOOL_OR expr { $$ = addOperation(&yylval, LSL_BOOL_OR, $1, $3); } + | expr LSL_BIT_OR expr { $$ = addOperation(&yylval, LSL_BIT_OR, $1, $3); } + | expr LSL_BIT_XOR expr { $$ = addOperation(&yylval, LSL_BIT_XOR, $1, $3); } + | expr LSL_BIT_AND expr { $$ = addOperation(&yylval, LSL_BIT_AND, $1, $3); } + | expr LSL_NOT_EQUAL expr { $$ = addOperation(&yylval, LSL_NOT_EQUAL, $1, $3); } + | expr LSL_EQUAL expr { $$ = addOperation(&yylval, LSL_EQUAL, $1, $3); } + | expr LSL_GREATER_EQUAL expr { $$ = addOperation(&yylval, LSL_GREATER_EQUAL, $1, $3); } + | expr LSL_LESS_EQUAL expr { $$ = addOperation(&yylval, LSL_LESS_EQUAL, $1, $3); } + | expr LSL_GREATER_THAN expr { $$ = addOperation(&yylval, LSL_GREATER_THAN, $1, $3); } + | expr LSL_LESS_THAN expr { $$ = addOperation(&yylval, LSL_LESS_THAN, $1, $3); } + | expr LSL_RIGHT_SHIFT expr { $$ = addOperation(&yylval, LSL_RIGHT_SHIFT, $1, $3); } + | expr LSL_LEFT_SHIFT expr { $$ = addOperation(&yylval, LSL_LEFT_SHIFT, $1, $3); } + | expr LSL_ADD expr { $$ = addOperation(&yylval, LSL_ADD, $1, $3); } + | expr LSL_SUBTRACT expr { $$ = addOperation(&yylval, LSL_SUBTRACT, $1, $3); } + | expr LSL_MULTIPLY expr { $$ = addOperation(&yylval, LSL_MULTIPLY, $1, $3); } + | expr LSL_MODULO expr { $$ = addOperation(&yylval, LSL_MODULO, $1, $3); } + | expr LSL_DIVIDE expr { $$ = addOperation(&yylval, LSL_DIVIDE, $1, $3); } + | LSL_BIT_NOT expr { $$ = addOperation(&yylval, LSL_BIT_NOT, NULL, $2); } + | LSL_BOOL_NOT expr { $$ = addOperation(&yylval, LSL_BOOL_NOT, NULL, $2); } + | LSL_SUBTRACT expr { $$ = addOperation(&yylval, LSL_NEGATION, NULL, $2); } %prec LSL_NEGATION + | LSL_PARENTHESIS_OPEN expr LSL_PARENTHESIS_CLOSE { $$ = addParenthesis(&yylval, $2); } + | LSL_INTEGER { $$ = addInteger(&yylval, $1); } ; statement : expr LSL_STATEMENT { $$ = createStatement(LSL_EXPRESSION, $1); YYVALID; } -- cgit v1.1