📄 existing.at
字号:
| PROTECTION_PART ;PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR | PROTECTION_PART PROT_SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR ;PROT_SPECIFIER : HHIDDEN { categ=CHIDEN;} | HPROTECTED { categ=CPROT;} | HHIDDEN HPROTECTED { categ=CHIPRO;} | HPROTECTED HHIDDEN { categ=CHIPRO;} ;MBEE_VIRT_PART : /*EMPT*/ | VIRTUAL_PART ;VIRTUAL_PART : HVIRTUAL HLABELSEPARATOR MBEE_SPEC_PART ;IDENTIFIER_LIST : HIDENTIFIER { regDecl($1, type, kind, categ);} | IDENTIFIER_LIST HPAREXPSEPARATOR HIDENTIFIER { regDecl($3, type, kind, categ);} ;IDENTIFIER_LISTC: HIDENTIFIER MBEE_CONSTANT { regDecl($1, type, kind, categ); categ=CLOCAL;} | IDENTIFIER_LISTC HPAREXPSEPARATOR HIDENTIFIER MBEE_CONSTANT { regDecl($3, type, kind, categ); categ=CLOCAL;} ;MBEE_CONSTANT : /* EMPTY */ | HVALRELOPERATOR { MBEENEWBLOCK(); if($1!=HEQ) yerror (8); if(type==TREF)yerror (7); categ=CCONSTU; mout(MIDENTIFIER); moutId($<token>0);} EXPRESSION { mout(MASSIGN); mout(MCONST);} ;/* GRAMATIKK FOR UTTRYKK */EXPRESSION : EXPRESSION_SIMP {} | HIF EXPRESSION HTHEN EXPRESSION HELSE EXPRESSION { mout(MELSEE); mout(MIFE);} ;EXPRESSION_SIMP : EXPRESSION_SIMP HASSIGN EXPRESSION { if($2==HASSIGNREF)mout(MASSIGNR); else mout(MASSIGN);$$=NULL;} | EXPRESSION_SIMP HCONC EXPRESSION_SIMP { mout(MCONC);$$=NULL;} | EXPRESSION_SIMP HOR HELSE EXPRESSION_SIMP %prec HORELSE { mout(MORELSEE);$$=NULL;} | EXPRESSION_SIMP HAND HTHEN EXPRESSION_SIMP %prec HANDTHEN { mout(MANDTHENE);$$=NULL;} | EXPRESSION_SIMP HEQV EXPRESSION_SIMP { mout(MEQV);$$=NULL;} | EXPRESSION_SIMP HIMP EXPRESSION_SIMP { mout(MIMP);$$=NULL;} | EXPRESSION_SIMP HOR EXPRESSION_SIMP { mout(MOR);$$=NULL;} | EXPRESSION_SIMP HAND EXPRESSION_SIMP { mout(MAND);$$=NULL;} | HNOT EXPRESSION_SIMP { mout(MNOT);$$=NULL;} | EXPRESSION_SIMP HVALRELOPERATOR EXPRESSION_SIMP { switch($2) { case HEQ: mout(MEQ);break; case HNE: mout(MNE);break; case HLT: mout(MLT);break; case HLE: mout(MLE);break; case HGT: mout(MGT);break; case HGE: mout(MGE);break; }$$=NULL;} | EXPRESSION_SIMP HREFRELOPERATOR EXPRESSION_SIMP { if($2==HNER) mout(MNER); else mout(MEQR);$$=NULL;} | EXPRESSION_SIMP HOBJRELOPERATOR EXPRESSION_SIMP { if($2==HIS) mout(MIS); else mout(MINS);$$=NULL;} | HTERMOPERATOR EXPRESSION_SIMP %prec UNEAR { if($1==HADD) mout(MUADD); else mout(MUSUB);$$=NULL;} | EXPRESSION_SIMP HTERMOPERATOR EXPRESSION_SIMP { if($2==HADD) mout(MADD); else mout(MSUB);$$=NULL;} | EXPRESSION_SIMP HFACTOROPERATOR EXPRESSION_SIMP { if($2==HMUL) mout(MMUL); else if($2==HDIV) mout(MDIV); else mout(MINTDIV);$$=NULL;} | EXPRESSION_SIMP HPRIMARYOPERATOR EXPRESSION_SIMP { mout(MPRIMARY);$$=NULL;} | HBEGPAR EXPRESSION HENDPAR { mout(MNOOP);$$=NULL;} | HTEXTKONST { mout(MTEXTKONST); moutTval($1);$$=NULL;} | HCHARACTERKONST { mout(MCHARACTERKONST); moutIval($1);$$=NULL;} | HREALKONST { mout(MREALKONST); moutRval($1);$$=NULL;} | HINTEGERKONST { mout(MINTEGERKONST); moutIval($1);$$=NULL;} | HBOOLEANKONST { mout(MBOOLEANKONST); moutIval($1);$$=NULL;} | HNONE { mout(MNONE);$$=NULL;} | HIDENTIFIER { $<ident>$=$1;} MBEE_ARG_R_PT {} | HTHIS HIDENTIFIER { mout(MTHIS); moutId($2);$$=NULL;} | HNEW HIDENTIFIER ARG_R_PT { mout(MNEWARG); moutId($2);$$=NULL;} | EXPRESSION_SIMP HDOT EXPRESSION_SIMP { mout(MDOT);$$=NULL;} | EXPRESSION_SIMP HQUA HIDENTIFIER { mout(MQUA); moutId($3);$$=NULL;} ;ARG_R_PT : /*EMPTY*/ { mout(MENDSEP);} | HBEGPAR ARGUMENT_LIST HENDPAR ;MBEE_ARG_R_PT : /*EMPTY*/ { mout(MIDENTIFIER); moutId($<ident>0); $$=$<ident>0;} | HBEGPAR ARGUMENT_LIST HENDPAR { mout(MARGUMENT); moutId($<ident>0);} ;ARGUMENT_LIST : EXPRESSION { mout(MENDSEP); mout(MARGUMENTSEP);} | EXPRESSION HPAREXPSEPARATOR ARGUMENT_LIST { mout(MARGUMENTSEP);} ;%%]])# Pass plenty of options, to exercise plenty of code, even if we# don't actually check the output. But SEGV is watching us, and# so might do dmalloc.AT_CHECK([[bison --verbose --defines input.y]], 0, [],[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])AT_CHECK([[grep '^State.*conflicts:' input.output]], 0,[[State 64 conflicts: 14 shift/reduceState 164 conflicts: 1 shift/reduceState 201 conflicts: 33 shift/reduce, 4 reduce/reduceState 206 conflicts: 1 shift/reduceState 240 conflicts: 1 shift/reduceState 335 conflicts: 9 shift/reduce, 2 reduce/reduceState 356 conflicts: 1 shift/reduceState 360 conflicts: 9 shift/reduce, 2 reduce/reduceState 427 conflicts: 9 shift/reduce, 2 reduce/reduce]])AT_CLEANUP## ----------------- #### GNU pic Grammar. #### ----------------- ##AT_SETUP([GNU pic Grammar])# GNU pic, part of groff.# Bison once reported shift/reduce conflicts that it shouldn't have.AT_DATA([[input.y]],[[%union { char *str; int n; double x; struct { double x, y; } pair; struct { double x; char *body; } if_data; struct { char *str; const char *filename; int lineno; } lstr; struct { double *v; int nv; int maxv; } dv; struct { double val; int is_multiplicative; } by; place pl; object *obj; corner crn; path *pth; object_spec *spec; saved_state *pstate; graphics_state state; object_type obtype;}%token <str> LABEL%token <str> VARIABLE%token <x> NUMBER%token <lstr> TEXT%token <lstr> COMMAND_LINE%token <str> DELIMITED%token <n> ORDINAL%token TH%token LEFT_ARROW_HEAD%token RIGHT_ARROW_HEAD%token DOUBLE_ARROW_HEAD%token LAST%token UP%token DOWN%token LEFT%token RIGHT%token BOX%token CIRCLE%token ELLIPSE%token ARC%token LINE%token ARROW%token MOVE%token SPLINE%token HEIGHT%token RADIUS%token WIDTH%token DIAMETER%token FROM%token TO%token AT%token WITH%token BY%token THEN%token SOLID%token DOTTED%token DASHED%token CHOP%token SAME%token INVISIBLE%token LJUST%token RJUST%token ABOVE%token BELOW%token OF%token THE%token WAY%token BETWEEN%token AND%token HERE%token DOT_N%token DOT_E%token DOT_W%token DOT_S%token DOT_NE%token DOT_SE%token DOT_NW%token DOT_SW%token DOT_C%token DOT_START%token DOT_END%token DOT_X%token DOT_Y%token DOT_HT%token DOT_WID%token DOT_RAD%token SIN%token COS%token ATAN2%token LOG%token EXP%token SQRT%token K_MAX%token K_MIN%token INT%token RAND%token SRAND%token COPY%token THRU%token TOP%token BOTTOM%token UPPER%token LOWER%token SH%token PRINT%token CW%token CCW%token FOR%token DO%token IF%token ELSE%token ANDAND%token OROR%token NOTEQUAL%token EQUALEQUAL%token LESSEQUAL%token GREATEREQUAL%token LEFT_CORNER%token RIGHT_CORNER%token NORTH%token SOUTH%token EAST%token WEST%token CENTER%token END%token START%token RESET%token UNTIL%token PLOT%token THICKNESS%token FILL%token COLORED%token OUTLINED%token SHADED%token ALIGNED%token SPRINTF%token COMMAND%left '.'/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */%left PLOT%left TEXT SPRINTF/* give text adjustments higher precedence than TEXT, so thatbox "foo" above ljust == box ("foo" above ljust)*/%left LJUST RJUST ABOVE BELOW%left LEFT RIGHT/* Give attributes that take an optional expression a higherprecedence than left and right, so that eg `line chop left'parses properly. */%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED%left LABEL%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST%left ORDINAL HERE '`'%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] *//* these need to be lower than '-' */%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS/* these must have higher precedence than CHOP so that `label %prec CHOP'works */%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END%left ','%left OROR%left ANDAND%left EQUALEQUAL NOTEQUAL%left '<' '>' LESSEQUAL GREATEREQUAL%left BETWEEN OF%left AND%left '+' '-'%left '*' '/' '%'%right '!'%right '^'%type <x> expr any_expr text_expr%type <by> optional_by%type <pair> expr_pair position_not_place%type <if_data> simple_if%type <obj> nth_primitive%type <crn> corner%type <pth> path label_path relative_path%type <pl> place label element element_list middle_element_list%type <spec> object_spec%type <pair> position%type <obtype> object_type%type <n> optional_ordinal_last ordinal%type <str> until%type <dv> sprintf_args%type <lstr> text print_args print_arg%%top: optional_separator | element_list { if (olist.head) print_picture(olist.head); } ;element_list: optional_separator middle_element_list optional_separator { $$ = $2; } ;middle_element_list: element { $$ = $1; } | middle_element_list separator element { $$ = $1; } ;optional_separator: /* empty */ | separator ;separator: ';' | separator ';' ;placeless_element: VARIABLE '=' any_expr { define_variable($1, $3); a_delete $1; } | VARIABLE ':' '=' any_expr { place *p = lookup_label($1); if (!p) { lex_error("variable `%1' not defined", $1); YYABORT; } p->obj = 0; p->x = $4; p->y = 0.0; a_delete $1; } | UP { current_direction = UP_DIRECTION; } | DOWN { current_direction = DOWN_DIRECTION; } | LEFT { current_direction = LEFT_DIRECTION; } | RIGHT { current_direction = RIGHT_DIRECTION; } | COMMAND_LINE { olist.append(make_command_object($1.str, $1.filename, $1.lineno)); } | COMMAND print_args { olist.append(make_command_object($2.str, $2.filename, $2.lineno)); } | PRINT print_args { fprintf(stderr, "%s\n", $2.str); a_delete $2.str; fflush(stderr); } | SH { delim_flag = 1; } DELIMITED { delim_flag = 0; if (safer_flag) lex_error("unsafe to run command `%1'", $3); else system($3); a_delete $3; } | COPY TEXT { if (yychar < 0) do_lookahead(); do_copy($2.str); // do not delete the filename } | COPY TEXT THRU { delim_flag = 2; } DELIMITED { delim_flag = 0; } until { if (yychar < 0) do_lookahead(); copy_file_thru($2.str, $5, $7); // do not delete the filename a_delete $5; a_delete $7; } | COPY THRU { delim_flag = 2; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -