=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/bc/bc.y,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- src/usr.bin/bc/bc.y 2003/11/13 19:42:21 1.18 +++ src/usr.bin/bc/bc.y 2003/11/17 11:20:13 1.19 @@ -1,5 +1,5 @@ %{ -/* $OpenBSD: bc.y,v 1.18 2003/11/13 19:42:21 otto Exp $ */ +/* $OpenBSD: bc.y,v 1.19 2003/11/17 11:20:13 otto Exp $ */ /* * Copyright (c) 2003, Otto Moerbeek @@ -31,7 +31,7 @@ */ #ifndef lint -static const char rcsid[] = "$OpenBSD: bc.y,v 1.18 2003/11/13 19:42:21 otto Exp $"; +static const char rcsid[] = "$OpenBSD: bc.y,v 1.19 2003/11/17 11:20:13 otto Exp $"; #endif /* not lint */ #include @@ -123,6 +123,9 @@ %token SCALE IBASE OBASE AUTO %token CONTINUE ELSE PRINT +%left BOOL_OR +%left BOOL_AND +%nonassoc BOOL_NOT %nonassoc EQUALS LESS_EQ GREATER_EQ UNEQUALS LESS GREATER %right ASSIGN_OP %left PLUS MINUS @@ -464,12 +467,8 @@ ; relational_expression - : expression + : expression EQUALS expression { - $$ = node($1, cs(" 0!="), END_NODE); - } - | expression EQUALS expression - { $$ = node($1, $3, cs("="), END_NODE); } | expression UNEQUALS expression @@ -492,6 +491,10 @@ { $$ = node($1, $3, cs("!>"), END_NODE); } + | expression + { + $$ = node($1, cs(" 0!="), END_NODE); + } ; @@ -611,6 +614,46 @@ | SCALE LPAR expression RPAR { $$ = node($3, cs("X"), END_NODE); + } + | BOOL_NOT expression + { + $$ = node($2, cs("N"), END_NODE); + } + | expression BOOL_AND alloc_macro pop_nesting expression + { + ssize_t n = node(cs("R"), $5, END_NODE); + emit_macro($3, n); + $$ = node($1, cs("d0!="), $3, END_NODE); + } + | expression BOOL_OR alloc_macro pop_nesting expression + { + ssize_t n = node(cs("R"), $5, END_NODE); + emit_macro($3, n); + $$ = node($1, cs("d0="), $3, END_NODE); + } + | expression EQUALS expression + { + $$ = node($1, $3, cs("G"), END_NODE); + } + | expression UNEQUALS expression + { + $$ = node($1, $3, cs("GN"), END_NODE); + } + | expression LESS expression + { + $$ = node($3, $1, cs("("), END_NODE); + } + | expression LESS_EQ expression + { + $$ = node($3, $1, cs("{"), END_NODE); + } + | expression GREATER expression + { + $$ = node($1, $3, cs("("), END_NODE); + } + | expression GREATER_EQ expression + { + $$ = node($1, $3, cs("{"), END_NODE); } ;