[BACK]Return to parser.y CVS log [TXT][DIR] Up to [local] / src / usr.bin / m4

Annotation of src/usr.bin/m4/parser.y, Revision 1.1

1.1     ! espie       1: %{
        !             2: /* $OpenBSD$ */
        !             3: /*
        !             4:  * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
        !             5:  *
        !             6:  * Permission to use, copy, modify, and distribute this software for any
        !             7:  * purpose with or without fee is hereby granted, provided that the above
        !             8:  * copyright notice and this permission notice appear in all copies.
        !             9:  *
        !            10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        !            15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
        !            16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            17:  */
        !            18: #define YYSTYPE        int32_t
        !            19: extern int32_t end_result;
        !            20: extern int yylex(void);
        !            21: extern int yyerror(const char *);
        !            22: %}
        !            23: %token NUMBER
        !            24: %left LOR
        !            25: %left LAND
        !            26: %left '|'
        !            27: %left '^'
        !            28: %left '&'
        !            29: %left EQ NE
        !            30: %left '<' LE '>' GE
        !            31: %left LSHIFT RSHIFT
        !            32: %left '+' '-'
        !            33: %left '*' '/' '%'
        !            34: %right UMINUS UPLUS '!' '~'
        !            35:
        !            36: %%
        !            37:
        !            38: top    : expr { end_result = $1; }
        !            39:        ;
        !            40: expr   : expr '+' expr { $$ = $1 + $3; }
        !            41:        | expr '-' expr { $$ = $1 - $3; }
        !            42:        | expr '*' expr { $$ = $1 * $3; }
        !            43:        | expr '/' expr { $$ = $1 / $3; }
        !            44:        | expr '%' expr { $$ = $1 % $3; }
        !            45:        | expr LSHIFT expr { $$ = $1 << $3; }
        !            46:        | expr RSHIFT expr { $$ = $1 >> $3; }
        !            47:        | expr '<' expr { $$ = $1 < $3; }
        !            48:        | expr '>' expr { $$ = $1 > $3; }
        !            49:        | expr LE expr { $$ = $1 <= $3; }
        !            50:        | expr GE expr { $$ = $1 >= $3; }
        !            51:        | expr EQ expr { $$ = $1 == $3; }
        !            52:        | expr NE expr { $$ = $1 != $3; }
        !            53:        | expr '&' expr { $$ = $1 & $3; }
        !            54:        | expr '^' expr { $$ = $1 ^ $3; }
        !            55:        | expr '|' expr { $$ = $1 | $3; }
        !            56:        | expr LAND expr { $$ = $1 && $3; }
        !            57:        | expr LOR expr { $$ = $1 || $3; }
        !            58:        | '(' expr ')' { $$ = $2; }
        !            59:        | '-' expr %prec UMINUS { $$ = -$2; }
        !            60:        | '+' expr %prec UPLUS  { $$ = $2; }
        !            61:        | '!' expr { $$ = !$2; }
        !            62:        | '~' expr { $$ = ~$2; }
        !            63:        | NUMBER
        !            64:        ;
        !            65: %%
        !            66: