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

📄 gram.head

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 HEAD
字号:
%{#include "defs"static int nstars;static int ndim;static int vartype;static ftnint varleng;static struct { ptr lb, ub; } dims[8];static struct labelblock *labarray[MAXLABLIST];static int lastwasbranch = NO;static int thiswasbranch = NO;extern ftnint yystno;ftnint convci();double convcd();struct addrblock *nextdata(), *mkbitcon();struct constblock *mklogcon(), *mkaddcon(), *mkrealcon();struct constblock *mkstrcon(), *mkcxcon();struct listblock *mklist();struct listblock *mklist();struct impldoblock *mkiodo();struct extsym *comblock();%}/* Specify precedences and associativies. */%left SCOMMA%nonassoc SCOLON%right SEQUALS%left SEQV SNEQV%left SOR%left SAND%left SNOT%nonassoc SLT SGT SLE SGE SEQ SNE%left SCONCAT%left SPLUS SMINUS%left SSTAR SSLASH%right SPOWER%%program:	| program stat SEOS	;stat:	  thislabel entry		{ lastwasbranch = NO; }	| thislabel  spec	| thislabel  exec		{ if($1 && ($1->labelno==dorange))			enddo($1->labelno);		  if(lastwasbranch && thislabel==NULL)			warn1("statement cannot be reached");		  lastwasbranch = thiswasbranch;		  thiswasbranch = NO;		}	| thislabel SINCLUDE filename		{ doinclude( $3 ); }	| thislabel  SEND  end_spec		{ lastwasbranch = NO;  endproc(); }	| thislabel SUNKNOWN		{ execerr("unclassifiable statement", 0);  flline(); };	| error		{ flline();  needkwd = NO;  inioctl = NO; 		  yyerrok; yyclearin; }	;thislabel:  SLABEL		{		if(yystno != 0)			{			$$ = thislabel =  mklabel(yystno);			if( ! headerdone )				puthead(NULL, procclass);			if(thislabel->labdefined)				execerr("label %s already defined",					convic(thislabel->stateno) );			else	{				if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel				    && thislabel->labtype!=LABFORMAT)					warn1("there is a branch to label %s from outside block",					      convic( (ftnint) (thislabel->stateno) ) );				thislabel->blklevel = blklevel;				thislabel->labdefined = YES;				if(thislabel->labtype != LABFORMAT)					putlabel(thislabel->labelno);				}			}		else    $$ = thislabel = NULL;		}	;entry:	  SPROGRAM new_proc progname		{ startproc($3, CLMAIN); }	| SBLOCK new_proc progname		{ startproc($3, CLBLOCK); }	| SSUBROUTINE new_proc entryname arglist		{ entrypt(CLPROC, TYSUBR, (ftnint) 0,  $3, $4); }	| SFUNCTION new_proc entryname arglist		{ entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, $3, $4); }	| type SFUNCTION new_proc entryname arglist		{ entrypt(CLPROC, $1, varleng, $4, $5); }	| SENTRY entryname arglist		{ if(parstate==OUTSIDE || procclass==CLMAIN			|| procclass==CLBLOCK)				execerr("misplaced entry statement", 0);		  entrypt(CLENTRY, 0, (ftnint) 0, $2, $3);		}	;new_proc:		{ newproc(); }	;entryname:  name		{ $$ = newentry($1); }	;name:	  SNAME		{ $$ = mkname(toklen, token); }	;progname:		{ $$ = NULL; }	| entryname	;arglist:		{ $$ = 0; }	| SLPAR SRPAR		{ $$ = 0; }	| SLPAR args SRPAR		{$$ = $2; }	;args:	  arg		{ $$ = ($1 ? mkchain($1,0) : 0 ); }	| args SCOMMA arg		{ if($3) $1 = $$ = hookup($1, mkchain($3,0)); }	;arg:	  name		{ $1->vstg = STGARG; }	| SSTAR		{ $$ = 0;  substars = YES; }	;filename:   SHOLLERITH		{		char *s;		s = copyn(toklen+1, token);		s[toklen] = '\0';		$$ = s;		}	;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -