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

📄 bi-parser.y

📁 gcc库的原代码,对编程有很大帮助.
💻 Y
字号:
/* Bytecode definition file parser.   Copyright (C) 1993 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA.  */%{#include <stdio.h>#include "hconfig.h"#include "bi-defs.h"extern char yytext[];extern int yyleng;/* Chain of all defs built by the parser. */struct def *defs;int ndefs;static struct node *makenode ();static struct variation *makevar ();static struct def *makedef ();void yyerror ();%}%union{  char *string;  struct def *def;  struct variation *variation;  struct node *node;}%token <string> DEFOP STRING%type <string> opt_string%type <def> defs def%type <variation> variations variation%type <node> list items item%%top:   defs    { defs = $1; }  ;defs:  def  | defs def    { $2->next = $1; $$ = $2; }  ;def:  DEFOP '(' STRING ',' opt_string ',' '(' variations ')' ')'    { $$ = makedef ($3, $5, $8); }  ;variations:  variation  | variations ',' variation    { $3->next = $1; $$ = $3; }  ;variation:  '(' opt_string ')'    { $$ = makevar ($2, (struct node *) NULL, (struct node *) NULL, (struct node *) NULL); }  | '(' opt_string ',' list ')'    { $$ = makevar ($2, $4, (struct node *) NULL, (struct node *) NULL); }  | '(' opt_string ',' list ',' list ')'    { $$ = makevar ($2, $4, $6, (struct node *) NULL); }  | '(' opt_string ',' list ',' list ',' list ')'    { $$ = makevar ($2, $4, $6, $8); }  ;opt_string:  /* empty */ { $$ = ""; }  | STRING { $$ = $1; }  ;list:  '(' items ')'    { $$ = $2; }  | /* empty */    { $$ = NULL; }  ;items:  item  /* Note right recursion. */  | item ',' items    { $1->next = $3; $$ = $1; }  ;item:  STRING    { $$ = makenode ($1); }  ;%%static struct node *makenode (s)     char *s;{  struct node *n;  n = (struct node *) malloc (sizeof (struct node));  n->text = s;  n->next = NULL;  return n;}static struct variation *makevar (name, inputs, outputs, literals)     char *name;     struct node *inputs, *outputs, *literals;{  struct variation *v;  v = (struct variation *) malloc (sizeof (struct variation));  v->name = name;  v->code = ndefs++;  v->inputs = inputs;  v->outputs = outputs;  v->literals = literals;  v->next = NULL;  return v;}static struct def *makedef (name, template, vars)     char *name, *template;     struct variation *vars;{  struct def *d;  d = (struct def *) malloc (sizeof (struct def));  d->basename = name;  d->template = template;  d->variations = vars;  d->next = NULL;  return d;}voidyyerror (s)     char *s;{  fprintf (stderr, "syntax error in input\n");  exit (FATAL_EXIT_CODE);}

⌨️ 快捷键说明

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