⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 existing.at

📁 GNU的词法/语法分析器bison源码
💻 AT
📖 第 1 页 / 共 5 页
字号:
                |       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 + -