这个里面的都是测试数据,总共得分5分。
从控制台输入,不能从文件中读取。
实现了基本功能,加分项目都没有去实现,没有函数数组这些的实现。
这是用C++语言写的,新建parser类别要选C++,其他对于VS的配置和C语言一样。
for语句用的是枚举所有情况,你可以自行修改。
对预备工作中自然语言描述的简化C编译器的语言特性的语法,设计上下文无关文法进行描述借助Yacc工具实现语法分析器考虑语法树的构造:1.语法树数据结构的设计:节点类型的设定,不同类型节点应保存哪些信息,多叉树的实现方式2.实现辅助函数,完成节点创建、树创建等功能3.利用辅助函数,修改上下文无关文法,设计翻译模式4.修改Yacc程序,实现能构造语法树的分析器考虑符号表处理的扩充1.完成语法分析后,符号表项应添加哪些标识符的属性,保存语法分析的结果2.如何扩充符号表数据结构,Yacc程序如何与Lex程序交互,正确填写符号表项以一个简单的C源程序验证你的语法分析器,可以文本方式输出语法树结构,以节点编号输出父子关系,来验证分析器的正确性,如下例:main(){ inta,b; if(a==0) a=b+1;}可能的输出为:0:TypeSpecifier,integer,Children:1:IDDeclaration,symbol:aChildren:2:IDDeclaration,symbol:bChildren:3:VarDeclaration,Children:0124:IDDeclaration,symbol:aChildren:5:ConstDeclaration,value:0,Children:6:Expr,op:==,Children:457:IDDeclaration,symbol:aChildren:8:IDDeclaration,symbol:bChildren:9:ConstDeclaration,value:1,Children:10:Expr,op:+,Children:8911:Expr,op:=,Children:71012:ifstatement,Children:61113:compoundstatement,Children:3 12
2015/5/4 5:41:12 3.77MB LEX YACC 南开 王刚
1
Memcached缓存技术,kye-value型,进步访问速度。
并支持分布式等
2020/8/4 11:18:58 3.25MB Memcached
1
Redis是一个Key-Value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是Redis会周期性的把更新的数据写入磁盘或者把修正操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
2015/6/15 2:13:27 2.58MB redis
1
用于PDE的PETScPETSc作为非线性PDE的求解器“PETSc是一套数据结构和例程,用于通过偏微分方程建模的科学应用程序的可扩展(并行)处理方案”[请参见::]编译中假设您已使用指定的gcc和g++编译器正确安装了PETSc。
转到CMakeLists.txt并为gcc和g++编译器更改第9行和第17行。
转到FindPETSc.cmake,并将行26/27更改为PETSC_DIR和PETSC_ARCH。
在根目录下,输入cmake.然后,输入make或make-j运行输入文件PETSc选项样式用于输入文件,例如-option_nameoption_value。
参见例如input/HeatCond1D.i键入./PETScSolver<input_file_name>来运行输入文件。
例如,。
./PETScSolver
2021/8/23 7:11:43 40KB CMake
1
援用usingXfrog.Net;用法如:JsonObjectnewObj=newJsonObject("json字符串");StringerrorCode=newObj["error_code"].Value;//获取其中的属性值。
2016/2/17 1:29:36 6KB JsonObject
1
操作系统课的实验(银里手算法)#include"malloc.h"  #include"stdio.h"  #include"stdlib.h"  #definealloclensizeof(structallocation)  #definemaxlensizeof(structmax)  #defineavalensizeof(structavailable)  #defineneedlensizeof(structneed)  #definefinilensizeof(structfinish)  #definepathlensizeof(structpath)  structallocation  {  intvalue;  structallocation*next;  };  structmax  {  intvalue;  structmax*next;  };  structavailable/*可用资源数*/  {  intvalue;  structavailable*next;  };  structneed/*需求资源数*/  {  intvalue;  structneed*next;  };  structpath  {  intvalue;  structpath*next;  };  structfinish  {  intstat;  structfinish*next;  };  intmain()  {  introw,colum,status=0,i,j,t,temp,processtest;  structallocation*allochead,*alloc1,*alloc2,*alloctemp;  structmax*maxhead,*maxium1,*maxium2,*maxtemp;  structavailable*avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1;  structneed*needhead,*need1,*need2,*needtemp;  structfinish*finihead,*finish1,*finish2,*finishtemp;  structpath*pathhead,*path1,*path2;  printf("\n请输入系统资源的种类数:");  scanf("%d",&colum);  printf("请输入现时内存中的进程数:");  scanf("%d",&row);  printf("请输入已分配资源矩阵:\n");  for(i=0;inext=alloc2->next=NULL;  scanf("%d",&allochead->value);  status++;  }  else  {  alloc2=(structallocation*)malloc(alloclen);  scanf("%d,%d",&alloc2->value);  if(status==1)  {  allochead->next=alloc2;  status++;  }  alloc1->next=alloc2;  alloc1=alloc2;  }  }  }  alloc2->next=NULL;  status=0;  printf("请输入最大需求矩阵:\n");  for(i=0;inext=maxium2->next=NULL;  scanf("%d",&maxium1->value);  status++;  }  else  {  maxium2=(structmax*)malloc(maxlen);  scanf("%d,%d",&maxium2->value);  if(status==1)  {  maxhead->next=maxium2;  status++;  }  maxium1->next=maxium2;  maxium1=maxium2;  }  }  }  maxium2->next=NULL;  status=0;  printf("请输入现时系统剩余的资源矩阵:\n");  for(j=0;jnext=available2->next=NULL;  work1->next=work2->next=NULL;  scanf("%d",&available1->value);  work1->value=available1->value;  status++;  }  else  {  available2=(structavailable*)malloc(avalen);  work2=(structavailable*)malloc(avalen);  scanf("%d,%d",&available2->value);  work2->value=available2->value;  if(status==1)  {  avahead->next=available2;  workhead->next=work2;  status++;  }  available1->next=available2;  available1=available2;  work1->next=work2;  work1=work2;  }  }  available2->next=NULL;  work2->next=NULL;  status=0;  alloctemp=allochead;  maxtemp=maxhead;  for(i=0;inext=need2->next=NULL;  need1->value=maxtemp->value-alloctemp->value;  status++;  }  else  {  need2=(structneed*)malloc(needlen);  need2->value=(maxtemp->value)-(alloctemp->value);  if(status==1)  {  needhead->next=need2;  status++;  }  need1->next=need2;  need1=need2;  }  maxtemp=maxtemp->next;  alloctemp=alloctemp->next;  }  need2->next=NULL;  status=0;  for(i=0;inext=finish2->next=NULL;  finish1->stat=0;  status++;  }  else  {  finish2=(structfinish*)malloc(finilen);  finish2->stat=0;  if(status==1)  {  finihead->next=finish2;  status++;  }  finish1->next=finish2;  finish1=finish2;  }  }  finish2->next=NULL;/*Initializationcompleated*/  status=0;  processtest=0;  for(temp=0;tempstat==0)  {  for(j=0;jnext,worktemp=worktemp->next)  if(needtemp->valuevalue)  processtest++;  if(processtest==colum)  {  for(j=0;jvalue+=alloctemp->value;  worktemp1=worktemp1->next;  alloctemp=alloctemp->next;  }  if(status==0)  {  pathhead=path1=path2=(structpath*)malloc(pathlen);  path1->next=path2->next=NULL;  path1->value=i;  status++;  }  else  {  path2=(structpath*)malloc(pathlen);  path2->value=i;  if(status==1)  {  pathhead->next=path2;  status++;  }  path1->next=path2;  path1=path2;  }  finishtemp->stat=1;  }  else  {  for(t=0;tnext;  finishtemp->stat=0;  }  }  else  for(t=0;tnext;  alloctemp=alloctemp->next;  }  processtest=0;  worktemp=workhead;  finishtemp=finishtemp->next;  }  }  path2->next=NULL;  finishtemp=finihead;  for(temp=0;tempstat==0)  {  printf("\n系统处于非安全状态!\n");  exit(0);  }  finishtemp=finishtemp->next;  }  printf("\n系统处于安全状态.\n");  printf("\n安全序列为:\n");  do  {  printf("p%d",pathhead->value);  }  while(pathhead=pathhead->next);  printf("\n");  return0;  }#include"string.h"#include#include#defineM5#defineN3#defineFALSE0#defineTRUE1/*M个进程对N类资源最大资源需求量*/intMAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*系统可用资源数*/intAVAILABLE[N]={10,5,7};/*M个进程对N类资源最大资源需求量*/intALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};/*M个进程已经得到N类资源的资源量*/intNEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*M个进程还需要N类资源的资源量*/intRequest[N]={0,0,0};voidmain(){inti=0,j=0;charflag='Y';voidshowdata();voidchangdata(int);voidrstordata(int);intchkerr(int);showdata();while(flag=='Y'||flag=='y'){i=-1;while(i=M){printf("请输入需申请资源的进程号(从0到");printf("%d",M-1);printf(",否则重输入!):");scanf("%d",&i);if(i=M)printf("输入的进程号不存在,重新输入!\n");}printf("请输入进程");printf("%d",i);printf("申请的资源数\n");for(j=0;jNEED[i][j]){printf("进程");printf("%d",i);printf("申请的资源数大于进程");printf("%d",i);printf("还需要");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n");/*printf("申请不合理,出错!请重新选择!\n");*/flag='N';break;}else{if(Request[j]>AVAILABLE[j]){printf("进程");printf("%d",i);printf("申请的资源数大于系统可用");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n");/*printf("申请不合理,出错!请重新选择!\n");*/flag='N';break;}}}if(flag=='Y'||flag=='y'){changdata(i);if(chkerr(i)){rstordata(i);showdata();}elseshowdata();}elseshowdata();printf("\n");printf("是否继续银里手算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示:");scanf("%c",&flag);}}voidshowdata(){inti,j;printf("系统可用的资源数为:\n");printf("");for(j=0;j");}printf("\n");return0;}
2015/11/20 3:54:43 883KB 算法 银行家
1
CSerialPortFirstVersionbyRemonSpekreijseon2000-02-08http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2483/A-communication-class-for-serial-port.htmSecondVersionbymrlongon2007-12-25https://code.google.com/p/mycom/增加ClosePort增加WriteToPort两个方法增加SendData与RecvData方法byliquanhaion2011-11-04http://blog.csdn.net/liquanhai/article/details/4955253增加ClosePort中交出控制权,防止死锁问题byliquanhaion2011-11-06http://blog.csdn.net/liquanhai/article/details/6941574增加ReceiveChar中防止线程死锁byviruscampon2013-12-04https://github.com/viruscamp/CSerialPort增加IsOpen判断能否打开修正InitPort中parityOddEven参数取值错误修改InitPort中portnr取值范围,portnr>9时特殊处理取消对MFC的依赖,使用HWND替代CWnd,使用win32thread函数而不是MFC的增加用户消息编号自定义,方法来自CnCommbyitas109on2014-01-10http://blog.csdn.net/itas109/article/details/18358297解决COM10以上端口无法显示的问题扩展可选择端口,最大值MaxSerialPortNum可以自定义添加QueryKey()和Hkey2ComboBox两个方法,用于自动查询当前有效的串口号。
byliquanhaion2014-12-18增加一些处理措施,主要是对减少CPU占用率byitas109on2016-05-07http://blog.csdn.net/itas109修复每次打开串口发送一次,当串口无应答时,需要关闭再打开或者接收完数据才能发送的问题。
解决办法:在m_hEventArray中调整m_hWriteEvent的优先级高于读的优先级。
CommThread(LPVOIDpParam)函数中读写的位置也调换。
参考:http://zhidao.baidu.com/link?url=RSrbPcfTZRULFFd2ziHZPBwnoXv1iCSu_Nmycb_yEw1mklT8gkoNZAkWpl3UDhk8L35DtRPo5VV5kEGpOx-Gea修复停止位在头文件中定义成1导致SetCommState报错的问题,应为1对应的停止位是1.5。
UINTstopsbits=ONESTOPBITswitch(stopbits)和switch(parity)增加默认情况,增强程序健壮性byitas109on2016-06-22http://blog.csdn.net/itas109增加ReceiveStr方法,用于接收字符串(接收缓冲区有多少字符就接收多少字符)。
解决ReceiveChar只能接收单个字符的问题。
byitas109on2016-06-29http://blog.csdn.net/itas109解决RestartMonitoring方法和StopMonitoring方法命令不准确引起的歧义,根据实际作用。
将RestartMonitoring更改为ResumeMonitoring,将StopMonitoring更改为SuspendMonitoring。
增加IsThreadSuspend方法,用于判断线程能否挂起。
改进ClosePort方法,增加线程挂起判断,解决由于线程挂起导致串口关闭死锁的问题。
增加IsReceiveString宏定义,用于接收时采用单字节接收还是多字节接收byitas109on2016-08-02http://blog.csdn.net/itas109https://github.com/itas109改进IsOpen方法,m_hComm增加INVALID_HANDLE_VALUE的情况,因为CreateFile
2021/9/12 2:07:30 19KB CSerialPort 串口类 串口
1
verilogPLIhandbookexample例子chapter.01\build_vpi_XL.mak..........\hello_test.log..........\hello_test.v..........\hello_vpi.c..........\show_value_test.log..........\show_value_test.v..........\show_value_vpi.c..........\vpi_user_XL.c.........2\build_vpi_XL.mak.......
2015/6/22 16:22:01 364KB verilog PLI handbook example
1
Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。
它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。
Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。
第一章序言第二章简介2.1.概述2.2.背景2.3.模块2.4.许可证信息2.5.支持第三章背景3.1.控制反转第一部分核心技术第四章对象、对象工厂和应用程序上下文4.1.简介4.2.IObjectFactory,IApplicationContext和IObjectDefinition接口引见4.2.1.TheIObjectFactory和IApplicationContext4.2.2.对象定义4.2.3.对象的创建4.2.3.1.通过构造器创建对象4.2.3.2.通过静态工厂方法创建对象4.2.3.3.通过实例工厂方法创建对象4.2.4.泛型类的对象创建4.2.4.1.通过构造器创建泛型类的对象4.2.4.2.通过静态工厂方法创建泛型类的对象4.2.4.3.通过实例工厂方法创建泛型类的对象4.2.5.对象标识符(id和name)4.2.6.Singleton和Prototype4.3.属性,协作对象,自动装配和依赖检查4.3.1.设置对象的属性和协作对象4.3.2.构造器参数解析4.3.2.1.根据参数类型匹配构造器参数4.3.2.2.根据参数索引匹配构造器参数4.3.2.3.根据名称匹配构造器参数4.3.3.详细讨论对象属性和构造器参数4.3.3.1.设置空值4.3.3.2.设置集合值4.3.3.3.设置泛型集合的值4.3.3.4.设置索引器属性4.3.3.5.内联对象定义4.3.3.6.idref节点4.3.3.7.引用协作对象4.3.3.8.value和ref节点的简短格式4.3.3.9.复合属性名4.3.4.方法注入4.3.4.1.查询方法注入4.3.4.2.替换任意方法4.3.5.引用其他对象或类型的成员4.3.5.1.使用对象或类的属性值进行注入4.3.5.2.使用字段值进行注入4.3.5.3.使用方法的返回值进行注入4.3.6.IFactoryObject接口的其它实现4.3.6.1.Log4Net4.3.7.使用depends-on4.3.8.自动装配协作对象4.3.9.检查依赖项4.4.类型转换4.4.1.枚举类型的转换4.4.2.内置的类型转换器4.4.3.自定义类型转换器4.4.3.1.使用CustomConverterConfigurer类4.5.自定义对象的行为4.5.生命周期接口4.5.1.1.IInitializingObject接口和init-method属性4.5.1.2.IDisposable接口和destroy-method属性4.5.2.让对象了解自己的容器4.5.2.1.IObjectFactoryAware接口4.5.2.2.IObjectNameAware接口4.5.3.IFactoryObject接口4.6.抽象与子对象定义4.7.与IObjectFactory接口交互4.7.1.获得IFactoryObject对象本身,而非其产品4.8.使用IObjectPostProcessor接口自定义对象4.9.使用IObjectFactoryPostProcessor定制对象工厂4.9.1.PropertyPlaceholderConfigurer类4.9.1.1.使用环境变量进行替换4.9.2.PropertyOverrideConfigurer类4.10.使用alias节点为对象添加别名4.11.IApplicationContext简介4.12.配置应用程序上下文4.12.1.注册自定义解析器4.12.2.创建自定义资源处理器4.12.3.配置类型别名4.12.4.注册类型转换器4.13.IApplicationContext接口的扩展功能4.13.1.上下文继承4.13.2.使用IMessageSource接口4.13.3.在Spring.NET内部使用资源4.13.4.松耦合事件模型4.13.5.IApplicationContext的事件通知4.14.定制IApplicationContex中对象的行为4.14.1.IApplicationContextAware标识接口4.14.2.IObjectPostProcessor接口4
2018/6/2 6:28:01 1.02MB spring.net 中文手册 在线版
1
MonggoDB教程,MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器功能。
MongoDB旨在为WEB应用提供可扩展的高功能数据存储解决方案。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB文档类似于JSON对象。
字段值可以包含其他文档,数组及文档数组。
2019/1/6 8:54:11 1.27MB MonggoDB
1
共 84 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡