跪求递归下降分析程序的实现的源代码

黄玮英 2019-12-21 23:42:00

推荐回答

文法递归,从实现上,主要进行两个步骤:1词法分析后,建立语法单元。2将语法单元根据操作符建立语法树,并对语法进行正确性校验。如果不是要求一定要全部自己写,完全可以依赖词法和语法分析工具。例如:1老牌的有yacc/lex,新版本bison/flex。2新的有java的javacc,跨语言的ANTLR。这些都是写好符合自己规则的文法解析规则,自动生成解析程序。然后自己加入文法执行逻辑。如果不是学习,不建议自己写文法分析程序。如果是学习,主要的工作还是在语法树的建立上。
齐晓安2019-12-22 00:11:16

提示您:回答为网友贡献,仅供参考。

其他回答

  • 你说的应该是编译原理吧。递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。所以,当有左递归出现时,递归下降分析程序就会出现回朔,将可能产生无限的循环,所以递归下降分析的前提条件之一就是消除左递归。
    连中连2019-12-22 00:01:52

相关问答

用的Arcengine10~你看看namespaceGisEditor{//////最短路径分析///publicclassClsPathFinder{privateIGeometricNetworkm_ipGeometricNetwork;privateIMapm_ipMap;privateIPointCollectionm_ipPoints;privateIPointToEIDm_ipPointToEID;privatedoublem_dblPathCost=0;privateIEnumNetEIDm_ipEnumNetEID_Junctions;privateIEnumNetEIDm_ipEnumNetEID_Edges;privateIPolylinem_ipPolyline;#regionPublicFunction//返回和设置当前地图publicIMapSetOrGetMap{set{m_ipMap=value;}get{returnm_ipMap;}}//打开几何数据集的网络工作空间publicvoidOpenFeatureDatasetNetworkIFeatureDatasetFeatureDataset{CloseWorkspace;if!InitializeNetworkAndMapFeatureDatasetConsole.WriteLine"打开network出错";}//输入点的集合publicIPointCollectionStopPoints{set{m_ipPoints=value;}get{returnm_ipPoints;}}//路径成本publicdoublePathCost{get{returnm_dblPathCost;}}//返回路径的几何体publicIPolylinePathPolyLine{IEIDInfoipEIDInfo;IGeometryipGeometry;ifm_ipPolyline!=nullreturnm_ipPolyline;Polylinem_ipPolyline2=newPolyline;m_ipPolyline=IPolylinem_ipPolyline2;IGeometryCollectionipNewGeometryColl=m_ipPolylineasIGeometryCollection;ISpatialReferenceipSpatialReference=m_ipMap.SpatialReference;IEIDHelperipEIDHelper=newEIDHelper;ipEIDHelper.GeometricNetwork=m_ipGeometricNetwork;ipEIDHelper.OutputSpatialReference=ipSpatialReference;ipEIDHelper.ReturnGeometries=true;IEnumEIDInfoipEnumEIDInfo=ipEIDHelper.CreateEnumEIDInfom_ipEnumNetEID_Edges;intcount=ipEnumEIDInfo.Count;ipEnumEIDInfo.Reset;forinti=0;idblHeightdblSearchTol=dblWidth/100;elsedblSearchTol=dblHeight/100;m_ipPointToEID.SnapTolerance=dblSearchTol;returntrue;}//关闭工作空间privatevoidCloseWorkspace{m_ipGeometricNetwork=null;m_ipPoints=null;m_ipPointToEID=null;m_ipEnumNetEID_Junctions=null;m_ipEnumNetEID_Edges=null;m_ipPolyline=null;}#endregion}。
TCPdump抓包命令tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。一、概述顾名思义,tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。引用#tcpdump-vvtcpdump:listeningoneth0,link-typeEN10MBEthernet,capturesize96bytes11:53:21.444591IPtos0x10,ttl64,id19324,offset0,flags#tcpdump-ieth0-nntcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecodelisteningoneth0,link-typeEN10MBEthernet,capturesize96bytes01:33:40.41IP192.168.1.100.22>192.168.1.11.1190:P116:232116ack1win964801:33:40.41IP192.168.1.100.22>192.168.1.11.1190:P232:364132ack1win9648:传送端是192.168.1.100这个IP,而传送的PortNumber为22,那个大于的符号指的是数据包的传输方向。192.168.1.11.1190:接收端的IP是192.168.1.11,且该主机开启port1190来接收。P116:232116:这个数据包带有PUSH的数据传输标志,且传输的数据为整体数据的116~232Byte,所以这个数据包带有116Bytes的数据量。ack1win9648:ACK与Windowsize的相关资料。最简单的说法,就是该数据包是由192.168.1.100传到192.168.1.11,通过的port是由22到1190,且带有116Bytes的数据量,使用的是PUSH的标记,而不是SYN之类的主动联机标志。接下来,在一个网络状态很忙的主机上面,你想要取得某台主机对你联机的数据包数据时,使用tcpdump配合管线命令与正则表达式也可以,不过,毕竟不好捕获。我们可以通过tcpdump的表达式功能,就能够轻易地将所需要的数据独立的取出来。在上面的范例一当中,我们仅针对eth0做监听,所以整个eth0接口上面的数据都会被显示到屏幕上,但这样不好分析,可以简化吗?例如,只取出port21的联机数据包。