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

📄 parser.y

📁 模拟器提供了一个简单易用的平台
💻 Y
字号:
/* * File: parser.y * Author: Suman Banerjee <suman@cs.umd.edu> * Date: July 31, 2001 * Terms: GPL * * myns simulator */%{#include <stdio.h>#include "main.h"#include "parser-event.h"#include <agent.h>#include <constants.h>extern RoutingType global_routing_type;extern char global_ts_routing_sgb_filename[];extern int yylineno;extern int yylex(void);int yyparse (void);extern ParserReturnInfo parser_events;%}%union {  double dval;  int ival;  char strval[MAX_NAME_SIZE];  struct AtEvent *ae;  AgentType atp;  SourceDistributionType sdt;}%token TOK_SEMICOLON TOK_NODE TOK_EDGE TOK_AT%token TOK_START TOK_STOP TOK_PRINT TOK_FINISH TOK_COMMENT TOK_SIMULATOR%token TOK_NODECOUNT TOK_JUNK%token TOK_ATTACH TOK_AGENT%token <ival> TOK_NUMBER_INT%token <dval> TOK_NUMBER_FLOAT%token <strval> TOK_NAME%token <strval> TOK_FILENAME%token TOK_RP TOK_MC%token TOK_COOP TOK_BSE TOK_BEACON TOK_QUERY%token TOK_SET TOK_BURSTSIZE TOK_GAP TOK_SOURCE%token TOK_CONSTANT TOK_UNIFORM TOK_EXPONENTIAL%token TOK_ROUTING TOK_ORACLE TOK_TS%type <ae> at_event%type <atp> agent_type%type <sdt> source_dist%%program :   program statement|   statement;statement :  valid_statement TOK_SEMICOLON;valid_statement :  route_statement|  nodecount_statement|  edge_statement|  attach_statement|  at_statement|  set_statement;route_statement :  TOK_ROUTING TOK_ORACLE{  global_routing_type = ROUTE_ORACLE;}|  TOK_ROUTING TOK_ORACLE TOK_TS TOK_FILENAME{  global_routing_type = ROUTE_ORACLE_TS;  strcpy(global_ts_routing_sgb_filename,$4);};nodecount_statement :  TOK_NODECOUNT TOK_NUMBER_INT{  parser_events.num_nodes = $2;};edge_statement :  TOK_EDGE TOK_NUMBER_INT TOK_NUMBER_INT TOK_NUMBER_FLOAT{  Edge *e = new Edge ($2,$3,$4);  parser_events.edge_list->Add(e,1);};attach_statement :  TOK_ATTACH TOK_AGENT TOK_NUMBER_INT TOK_NODE TOK_NUMBER_INT agent_type{  if (parser_events.attach_list->Locate($3) != NULL) {    printf ("Err] Agent %d re-attached\n", $3);    exit(-1);  }  Attachment *a = new Attachment($3,$5,$6);;  parser_events.attach_list->Add(a,$3);};agent_type :  TOK_RP{  $$ = AGENT_APPLICATION_RP;}|  TOK_MC{  $$ = AGENT_APPLICATION_MC;}|  TOK_BSE{  $$ = AGENT_APPLICATION_BSE;}|TOK_QUERY{  $$ = AGENT_APPLICATION_QUERY;}|TOK_COOP{  $$ = AGENT_APPLICATION_COOP;}|TOK_BEACON{  $$ = AGENT_APPLICATION_BEACON;};at_statement :  TOK_AT TOK_NUMBER_FLOAT at_event{  AtEvent * ae = $3;  ae->at = $2;  parser_events.ev_list->Add(ae,$2);};at_event :  TOK_NODE TOK_NUMBER_INT TOK_START{  AtEvent *ae = new AtEvent;  ae->t = START_NODE;  ae->node = $2;  $$ = ae;}|  TOK_AGENT TOK_NUMBER_INT TOK_START{  AtEvent *ae = new AtEvent;  ae->t = START_AGENT;  ae->agent = $2;  $$ = ae;}|  TOK_NODE TOK_NUMBER_INT TOK_STOP{  AtEvent *ae = new AtEvent;  ae->t = STOP_NODE;  ae->node = $2;  $$ = ae;}|  TOK_AGENT TOK_NUMBER_INT TOK_STOP{  AtEvent *ae = new AtEvent;  ae->t = STOP_AGENT;  ae->agent = $2;  $$ = ae;}|  TOK_AGENT TOK_NUMBER_INT TOK_SOURCE source_dist TOK_BURSTSIZE TOK_NUMBER_INT TOK_GAP TOK_NUMBER_FLOAT {  AtEvent *ae = new AtEvent;  ae->t = SOURCE_AGENT;  ae->agent = $2;  ae->sdt = $4;  ae->source_burst = $6;  ae->source_gap = $8;  $$ = ae;}|  TOK_SIMULATOR TOK_STOP{  AtEvent *ae = new AtEvent;  ae->t = STOP_SIMULATION;  $$ = ae;}|  TOK_SIMULATOR TOK_PRINT{  AtEvent *ae = new AtEvent;  ae->t = PRINT_SIMULATION_STATUS;  $$ = ae;};source_dist:  TOK_CONSTANT{  $$ = DIST_CONSTANT;}|  TOK_UNIFORM{  $$ = DIST_UNIFORM;}|  TOK_EXPONENTIAL{  $$ = DIST_EXPONENTIAL;};set_statement:  TOK_SET TOK_NAME TOK_NUMBER_INT{  NamedConstant::setval($2,$3);  /* Constant<int>::setval($2,$3); */  /* constant_setval($2,$3,0.0,true); */}|  TOK_SET TOK_NAME TOK_NUMBER_FLOAT{  NamedConstant::setval($2,$3);  /* Constant<double>::setval($2,$3); */  /* constant_setval($2,0,$3,false); */};%%int yyerror (char *s){ printf ("[Err] in parsing line %d\n", yylineno); exit(-1); return 0;}

⌨️ 快捷键说明

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