=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/bc/bc.y,v retrieving revision 1.18 retrieving revision 1.19 diff -c -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 **** %{ ! /* $OpenBSD: bc.y,v 1.18 2003/11/13 19:42:21 otto Exp $ */ /* * Copyright (c) 2003, Otto Moerbeek --- 1,5 ---- %{ ! /* $OpenBSD: bc.y,v 1.19 2003/11/17 11:20:13 otto Exp $ */ /* * Copyright (c) 2003, Otto Moerbeek *************** *** 31,37 **** */ #ifndef lint ! static const char rcsid[] = "$OpenBSD: bc.y,v 1.18 2003/11/13 19:42:21 otto Exp $"; #endif /* not lint */ #include --- 31,37 ---- */ #ifndef lint ! static const char rcsid[] = "$OpenBSD: bc.y,v 1.19 2003/11/17 11:20:13 otto Exp $"; #endif /* not lint */ #include *************** *** 123,128 **** --- 123,131 ---- %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,475 **** ; relational_expression ! : expression { - $$ = node($1, cs(" 0!="), END_NODE); - } - | expression EQUALS expression - { $$ = node($1, $3, cs("="), END_NODE); } | expression UNEQUALS expression --- 467,474 ---- ; relational_expression ! : expression EQUALS expression { $$ = node($1, $3, cs("="), END_NODE); } | expression UNEQUALS expression *************** *** 492,497 **** --- 491,500 ---- { $$ = node($1, $3, cs("!>"), END_NODE); } + | expression + { + $$ = node($1, cs(" 0!="), END_NODE); + } ; *************** *** 611,616 **** --- 614,659 ---- | 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); } ;