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

📄 multi.y

📁 和YACC一样
💻 Y
字号:
/* Test program for multiple start non-terminals.  * 3 separate grammars for infix, postfix and suffix arith expressions. * No unary minus.  No error checking. */%{#include <stdio.h>int yylex();void yyerror(char *s);%}/* !gramBegin! */%start infix, prefix, suffix%%infix  : iExp '\n' %look(0) { return $1; }  ;iExp  : iExp '+' iTerm { $$= $1 + $3; }  | iTerm  ;iTerm  : iTerm '*' iFactor { $$= $1 * $3; }  | iFactor  ;iFactor  : digit   | '(' iExp ')' { $$= $2; }  ;digit  : '0'	{ $$= 0; }  | '1'	{ $$= 1; }  | '2'	{ $$= 2; }  | '3'	{ $$= 3; }  | '4'	{ $$= 4; }  | '5'	{ $$= 5; }  | '6'	{ $$= 6; }  | '7'	{ $$= 7; }  | '8'	{ $$= 8; }  | '9'	{ $$= 9; }  ;prefix  : pExp '\n' %look(0) { return $1; }  ;pExp  : '+' pExp pExp { $$= $2 + $3; }  | '*' pExp pExp { $$= $2 * $3; }  | digit  ;suffix  : sExp '\n' %look(0) { return $1; }  ;sExp  : sExp sExp '+' { $$= $1 + $2; }  | sExp sExp '*' { $$= $1 * $2; }  | digit  ;/* !gramEnd! */%%int yylex(){  int c= getchar();  while (c == ' ' && c == '\t') c= getchar();  if (c == EOF) c= 0;  return c;}void yyerror(char *s) {  printf(s);}/* !mainBegin! */int main() /* Call infix grammar if line starts with 'i'; suffix grammar if line * starts with a 's'; prefix grammar if line starts with a 'p'. */{  int c;  while ((c= getchar()) != EOF) {    int z= yyparse(c == 'i' ? infix : (c == 's' ? suffix : prefix));    printf("%d\n", z);  }  return 0;}/* !mainEnd! */

⌨️ 快捷键说明

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