欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 算符优先词法分析器心得体会

算符优先词法分析器心得体会

时间:2018-07-28 20:31

在算符优先分析法中,为什么要在找到最左素短语的尾时才返回来确定其对应的头,能否

在计算机科学里面,左递归是一种递归的特殊状况。

在上下文无关文法内里的说法,,若一个非终端符号(non-terminal)r有任何直接的文法规则或者透过多个文法规则,推导出的句型(sentential form)其中最左边的符号 又会出现r,则我们说这个非终端符号r是左递归的。

使用类似的方式我们可以定义出某文法本身是左递归的。

急求高人编写一个简单的词法分析程序

主函数我在用消息发给你,不过消息能发的内容太少了。

我就多分几次发\\\/***************************************************************************** * 程序名:词法分析器 * * 功能:从program.txt读入一段完整c++代码,根据原有的关键字表(keyword)、 * * 算符表(Operator)、界符表(seperator)以及新建的标识符表对每个词 * * 进行分类,找出每个词的词性及在对应表中的位置。

对关键字,只输出一次 * * (即后面再出现相同的关键字时,不在重新输出)。

标识符表为identifier.txt, * * 对于数字常量,直接输出,并标记为constant。

每个词的词性、位置均输出在 * * result.txt里。

标识符先存放在数组内,等对所有词进行判断之后才输出到文件中 * * 这样的话,可以比较判断是否有相同的标识符。

* * * * * 大体思路:用get()函数从文件中一次读入一个字符,对该字符进行判断。

分情 * * 况讨论,对大部分的情况,都必须预先读取下一位来对该位进行判断才可以。

个 * * 别情况甚至得预先读取两位来判断。

* *****************************************************************************\\\/ #include #include #include #include using namespace std; \\\/\\\/关键字表 string keyword[63]={and,auto,bool,break,case,catch,char,class,const,const_cast, continue,default,delete,do,double,dynamic_cast,else,enum,long, explicit,extern,false,float,for,friend,goto,if,inline,int,include, mutable,namespace,signed,typeid,typename,union,unsigned,short,typedef, new,operator,or,private,protected,public,register,reinterpret_cast,return, sizeof,static,static_cast,struct,switch,template,this,throw,true,try, using,virtual,void,volatile,while}; \\\/\\\/关键字表 int used[42]; \\\/\\\/判断关键字是否已经使用过 \\\/\\\/算符表 string Operator[23]={+, ++, -, --, *, \\\/, %, !, ?:, =, ==, ||, &&, & ,**, *=, +=, -=, \\\/=, !=,|,<=,>=}; \\\/\\\/界符表 string seperator[17]={<, >, (, ), ,, [, ], ;, {, }, #, \\\\, :, \\\\', >>, <<,::}; int iskeyword(char *a) \\\/\\\/是否为关键字,是的话返回关键字的下标加1。

不是的话返回0 { int i; for(i=0;i<63;i++) if( strcmp(a,keyword[i].c_str())==0 ) return i+1; return 0; } int isoperator(char *a) \\\/\\\/是否为操作符,是的话返回关键字的下标加1。

不是的话返回0 { int i; for(i=0;i<23;i++) if(strcmp(a,Operator[i].c_str())==0) return i+1; return 0; } int isseperator(char *a) \\\/\\\/是否为分隔符,是的话返回关键字的下标加1。

不是的话返回0 { int i; for(i=0;i<17;i++) if(strcmp(a,seperator[i].c_str())==0) return i+1; return 0; }

编译原理 词法分析器的问题

QQ号给我留一下。

我会联系你的。

留言到我百度HI上就可以。

编译原理题目

这老师挺失败 我也是山师的 哈哈哈哈

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片