亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lazycalc.y

?? 和YACC一樣
?? Y
字號:
/* !declBegin! */%{#include <ctype.h>#include <math.h>#include <stdio.h>int yylex(void);void yyerror(const char *errMsg);/* Typedef typical unary <math.h> function. */typedef double (*MathFnP)(double input);/* Interface to symbol table. */static double getIDVal(const char *name);static MathFnP getIDFn(const char *name);static void setIDVal(const char *name, double val);static void setIDFn(const char *name, MathFnP fnP);static unsigned isFn(const char *name);%}%token <val>(double $v) NUM_TOK  	/* Double precision number */%token <id>(const char *$id) ID_TOK	/* Identifiers. */%right '='%left '-' '+'%right FN		/* Prefix function application. */%left '*' '/'%left NEG		/* Negation--unary minus */%right '^'    		/* Exponentiation *//* Grammar follows */%%/* !declEnd! *//* !gramBegin! */input  : /* empty */  | input line  ;line  : '\n'  | exp($v) '\n'		{ printf ("\t%.10g\n", $v); }  | error '\n' 			{ yyerrok; }  ;/* !fnBegin! */exp(double $v)  : ID_TOK($id)  %test(isFn($id))    exp($v1) %prec FN		{ $v= (*(getIDFn($id)))($v1); }/* !fnEnd! */  | ID_TOK($id) 		{ $v= getIDVal($id); }  | ID_TOK($id) '=' exp($v)   	{ setIDVal($id, $v); }  | NUM_TOK($v)  | exp($v1) '+' exp($v2)   	{ $v= $v1 + $v2; }  | exp($v1) '-' exp($v2)   	{ $v= $v1 - $v2; }  | exp($v1) '*' exp($v2)   	{ $v= $v1 * $v2; }  | exp($v1) '/' exp($v2)   	{ $v= $v1 / $v2; }  | '-' exp($v1)  %prec NEG 	{ $v= -$v1; }  | exp($v1) '^' exp($v2)   	{ $v= pow($v1, $v2); }  | '(' exp($v1) ')'   		{ $v= $v1; }  ;/* End of grammar */%%/* !gramEnd! *//* !strBegin! *//* String space ADT to map identifiers into IDNums. */typedef struct Ident {  const char *name;	/* NUL-terminated chars of identifier. */  struct Ident *succ;	/* Next entry in linear chain. */} Ident;/* The string space is a chain of Ident's. */static Ident *strSpace;static const char *getID(const char *name){  Ident *p;  for (p= strSpace; p != NULL; p= p->succ) {    if (strcmp(name, p->name) == 0) break;  }  if (!p) {    p= malloc(sizeof(Ident));    p->name= name;    p->succ= strSpace; strSpace= p;  }  return p->name;}/* !strEnd! *//* !symTypeBegin! *//* Symbol table ADT. *//* Possible types for symbols. */typedef enum { VAR_SYM, FN_SYM } SymType;typedef struct Sym {  const char *name;	/* Name of symbol. */  SymType type;		/* Type of symbol. */  union {    double var; 	/* Value of a VAR_SYM. */    MathFnP fn;		/* Value of a FN_SYM. */  } value;  struct Sym *succ;  	/* Link field. */} Sym;/* The symbol table: a chain of Sym's.*/static Sym *symTab;/* !symTypeEnd! *//* !getSymBegin! *//* Search symTab for name.  If doCreate, then create an entry for * it if it is not there.  Return pointer to Sym entry. */static Sym *getSym(const char *name, unsigned doCreate) {  Sym *p;  for (p= symTab; p != NULL && p->name != name; p= p->succ) ;  if (p == NULL && doCreate) {    p= malloc(sizeof(Sym));     p->name= name; p->succ= symTab; symTab= p;  }  return p;}/* !getSymEnd! *//* !isFnBegin! *//* Return nonzero iff name is a function. */static unsignedisFn(const char *name){  Sym *p= getSym(name, 0);  return (p != NULL && p->type == FN_SYM);}/* !isFnEnd! *//* !getValBegin! *//* Get value associated with name; signal error if not ok. */static double getIDVal(const char *name){  const Sym *p= getSym(name, 0);  double val= 1.0; /* A default value. */  if (!p) fprintf(stderr, "No value for %s.\n", name);  else if (p->type != VAR_SYM)     fprintf(stderr, "%s is not a variable.\n", name);  else val= p->value.var;  return val;}/* Get function associated with name; signal error if not ok. */static MathFnP getIDFn(const char *name){  const Sym *p= getSym(name, 0);  MathFnP fn= sin; /* A default value. */  if (!p) fprintf(stderr, "No value for %s.\n", name);  else if (p->type != FN_SYM)     fprintf(stderr, "%s is not a function.\n", name);  else fn= p->value.fn;  return fn;}/* !getValBegin! *//* !setSymBegin! *//* Unconditionally set name to a VAR_SYM with value val. */static void setIDVal(const char *name, double val){  Sym *p= getSym(name, 1);  p->type= VAR_SYM; p->value.var= val;}/* Unconditionally set name to a FN_SYM with fn ptr fnP. */static void setIDFn(const char *name, MathFnP fnP){  Sym *p= getSym(name, 1);  p->type= FN_SYM; p->value.fn= fnP;}/* !setSymEnd! *//* !initSymBegin! *//* Initial functions. */struct {   const char *name; 	/* Name of function. */  MathFnP fn;		/* Corresponding <math.h> function. */} initFns[]= {  { "sin", sin },  { "cos", cos },  { "atan", atan },  { "ln", log },  { "exp", exp },  { "sqrt", sqrt }};static voidinitSyms(void){  const unsigned n= sizeof(initFns)/sizeof(initFns[0]);  unsigned i;  for (i= 0; i < n; i++) {    setIDFn(getID(initFns[i].name), initFns[i].fn);  }}/* !initSymEnd! *//* !readIDBegin! *//* Read alphanumerics from stdin into a buffer.  Check * if identical to previous ident: if so return pointer * to previous, else return pointer to new buffer. * Assumes char after ident is not an EOF. */static const char *readID(void){  enum { SIZE_INC= 40 };  unsigned size= SIZE_INC;  char *buf= malloc(size);  unsigned i= 0;  int c;	  const char *ident;      do { /* Accumulate stdin into strSpace. */    c= getchar();    if (i >= size) buf= realloc(buf, size*= 2);    buf[i++]= c;  } while (isalnum(c));  ungetc(c, stdin); buf[i - 1]= '\0'; /* Undo extra read. */  buf= realloc(buf, i); /* Resize buf to be only as big as needed. */  ident= getID(buf);	/* Search string-space. */  if (ident != buf) free(buf); /* Previously existed. */  return ident;}/* !readIDEnd! */intyylex(void){  int c;  /* Ignore whitespace, get first nonwhite character.  */  while ((c= getchar ()) == ' ' || c == '\t') ;  if (c == EOF)    return 0;  /* Char starts a number => parse the number.    */  if (c == '.' || isdigit (c)) {    ungetc (c, stdin);    scanf ("%lf", &yylval.val.v);    return NUM_TOK;  }/* !idLexBegin! */  /* Char starts an identifier => read the name.  */  if (isalpha(c)) {    ungetc(c, stdin);    yylval.id.id= readID();    return ID_TOK;  }/* !idLexEnd! */  /* Any other character is a token by itself.   */  return c;}/* Called by yyparse on error */voidyyerror(const char *s)  {  printf ("%s\n", s);}/* !mainBegin! */int main(){  initSyms();  return yyparse();}/* !mainEnd! */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人一区二区精品非洲| 久久精品亚洲精品国产欧美| 欧美午夜影院一区| 欧美一级国产精品| 亚洲色图视频网| 人人狠狠综合久久亚洲| 99久久777色| 欧美精品一区男女天堂| 一个色在线综合| 国内不卡的二区三区中文字幕 | 久久综合国产精品| 亚洲猫色日本管| 国产精一区二区三区| 欧美亚洲高清一区二区三区不卡| 欧美精品一区二区三区视频| 亚洲成人一区在线| 国产精品国产三级国产普通话99| 欧美一级艳片视频免费观看| 国产精品你懂的在线欣赏| 视频一区在线播放| 91国内精品野花午夜精品| 久久毛片高清国产| 蜜臀精品一区二区三区在线观看 | 亚洲国产成人91porn| 成人综合在线视频| 久久久亚洲综合| 日韩二区三区四区| 色88888久久久久久影院野外| 国产午夜一区二区三区| 奇米影视一区二区三区| 欧美日韩亚洲国产综合| 亚洲精品视频在线观看免费| 成人免费毛片aaaaa**| 日韩高清电影一区| 色综合视频在线观看| 亚洲欧美综合色| 丁香婷婷深情五月亚洲| 久久精品日产第一区二区三区高清版 | 制服丝袜日韩国产| 亚洲国产另类av| 在线免费不卡电影| 亚洲综合视频在线| 日本丶国产丶欧美色综合| 亚洲免费视频中文字幕| 91免费视频观看| 国产精品久久福利| 一本大道综合伊人精品热热 | 69av一区二区三区| 日韩电影在线观看网站| 911精品国产一区二区在线| 奇米亚洲午夜久久精品| 性感美女久久精品| 亚洲综合成人在线| 91成人网在线| 香蕉影视欧美成人| 日韩欧美中文字幕制服| 捆绑调教美女网站视频一区| 久久综合色综合88| 成人免费高清视频在线观看| 亚洲欧洲精品一区二区三区不卡 | 精品粉嫩aⅴ一区二区三区四区| 男人的天堂久久精品| 久久综合中文字幕| www.欧美亚洲| 爽好久久久欧美精品| 欧美成人精品高清在线播放| 国产成人啪午夜精品网站男同| 1000部国产精品成人观看| 欧美日韩一区视频| 国产一区二区在线观看视频| 国产精品国产三级国产专播品爱网 | 亚洲日本一区二区三区| 在线观看亚洲专区| 青青草成人在线观看| 国产亚洲成aⅴ人片在线观看| 北岛玲一区二区三区四区| 亚洲成人777| 久久久久久黄色| 欧美亚洲动漫精品| 国产一区二区三区日韩| 一区二区在线免费观看| 精品电影一区二区三区| 日本电影欧美片| 国产综合色在线| 亚洲国产日韩一区二区| 久久久综合精品| 欧美在线不卡一区| 成人在线综合网| 视频在线观看一区二区三区| 国产精品传媒入口麻豆| 欧美一区二区三区免费视频| 91免费观看国产| 国产夫妻精品视频| 亚洲免费色视频| 精品久久久久久久久久久院品网| 成人久久18免费网站麻豆| 日本最新不卡在线| 亚洲激情欧美激情| 国产日韩欧美精品在线| 欧美一区在线视频| 91国产免费观看| 91亚洲国产成人精品一区二区三 | 国产九九视频一区二区三区| 亚洲在线免费播放| 国产精品久久久久久久久久免费看 | 久久精品国产亚洲高清剧情介绍| 亚洲美女屁股眼交3| 日本一区二区不卡视频| 精品伦理精品一区| 欧美白人最猛性xxxxx69交| 亚洲六月丁香色婷婷综合久久| 欧美一级艳片视频免费观看| 在线亚洲一区二区| 99热国产精品| 成人动漫精品一区二区| 精品系列免费在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲夂夂婷婷色拍ww47| 亚洲精品伦理在线| 国产精品嫩草影院com| 国产网站一区二区| 国产日韩欧美高清在线| 久久亚洲二区三区| 久久中文娱乐网| 精品成人在线观看| www久久久久| 久久蜜桃香蕉精品一区二区三区| 精品国产一区久久| 久久综合国产精品| 欧美国产成人在线| 亚洲欧洲精品一区二区精品久久久 | 亚洲福利视频三区| 亚洲r级在线视频| 日韩电影在线免费看| 麻豆国产精品777777在线| 美女性感视频久久| 国精产品一区一区三区mba桃花| 久久精品国产免费| 国产精品一区不卡| 91一区二区在线观看| 欧美天堂一区二区三区| 91麻豆精品国产91久久久| 日韩欧美一级精品久久| 久久综合丝袜日本网| 国产精品毛片久久久久久| 亚洲欧洲综合另类| 亚洲成人tv网| 麻豆高清免费国产一区| 国产成人av一区| 在线观看国产精品网站| 91精品国产入口在线| 国产午夜精品久久| 亚洲欧美在线高清| 香蕉乱码成人久久天堂爱免费| 久久99九九99精品| 成人av电影免费观看| 欧美老肥妇做.爰bbww| 精品999在线播放| 亚洲码国产岛国毛片在线| 蜜桃av一区二区| va亚洲va日韩不卡在线观看| 欧美日本一区二区在线观看| 久久九九99视频| 亚洲一区二区三区四区在线免费观看 | 亚洲另类在线一区| 一区二区激情小说| 七七婷婷婷婷精品国产| 成人av免费网站| 欧美一二区视频| 国产精品国模大尺度视频| 日韩精品一二三四| www.欧美精品一二区| 日韩欧美一级精品久久| 日韩一区欧美一区| 另类欧美日韩国产在线| 91免费精品国自产拍在线不卡| 欧美一区二区在线观看| 18成人在线视频| 国内精品免费**视频| 欧美日韩日日骚| 中文字幕一区二区三区av| 美女免费视频一区二区| 欧美影院午夜播放| 国产精品传媒在线| 国产69精品久久99不卡| 日韩欧美高清dvd碟片| 一区二区三区成人在线视频| 亚洲欧美国产毛片在线| 成人小视频在线| 欧美精品一区二区三区在线| 一区二区三区产品免费精品久久75 | 久久er99热精品一区二区| 在线这里只有精品| 中文字幕一区二区三区不卡在线 | 国产精品美女久久久久久| 麻豆精品一区二区av白丝在线| 欧美日韩免费观看一区二区三区| 最新中文字幕一区二区三区| 成人中文字幕合集| 欧美韩国日本一区|