• 大小: 1.18MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-29
  • 语言: 其他
  • 标签: 语法分析  

资源简介

这是我自己写的编译原理赋值语句(语法语义分析)翻译程序其中内含有词法分析程序,经多次测试程序无误。运行的方法是:在“test.txt"文本文档中输入你要测试的赋值表达式例子,其中文本文档中有样例,表达式要以“;”(分号结束)。 "lex.h"为词法分析都文件,最后翻译的结果是以逆波兰式显示在dos中的,其它的一些txt文本中保存着词法分析的结果。希望对大家有所帮助!

资源截图

代码片段和文件信息

#include
#include
#include  
#include
#include
#include             
using namespace std;
#include “Lex.h“
int ForecastTable[7][14]={{0000000100 0 0 00}
                          {0000000200 0 0 0 0}
  {3300333330 4 5 0 0}
  {14150089710600000}
  {181920210000000000}
  {161616160000017001717}
  {13131313121100013001313}};
string b[]={“+““-““*““/““(““)““=““#“};
int xuNum(string s)
{
for(int i=0;i<8;i++)
{
if(s==b[i])
return i;
}
return -1;
}
int Vntermi(string s)
{
char *Vn[7]={“S““A““B““E““F““T““P“};
for(int i=0;i<7;i++)
{
if(Vn[i]==s)
return i;
}
return -1;
}
int Vtermi(string s)
{
char *Vt[14]={“+““-““*““/““++““--““n““i““(““)““f““t““;““#“};  //
for(int i=0;i<14;i++)
{
if(Vt[i]==s)
return i;
}
return -1;
}
int main()
{
Lex l;
l.Initial();
l.Handle();
stackAnalysis_Stack; //定义的分析栈
Analysis_Stack.push(“#“);
Analysis_Stack.push(“S“);
bool Hefa=true;
l.Limit_Queue.push(“#“);
l.Sequence_Queue.push(5); //#当做界限符处理压力队列,队列里存储着剩余的输入字符串
   cout<<    Analysis_Stack.size()<   cout<
while(Analysis_Stack.size()!=1&&l.Sequence_Queue.size()!=1)
{
//cout<<“yinfei“< string S_Analysis;
S_Analysis=Analysis_Stack.top();
int i_Analysis;
i_Analysis=Vntermi(S_Analysis);
if(i_Analysis==-1)          //分析栈里的首元素是终极符,应该匹配
{
if(S_Analysis==“+“||S_Analysis==“-“||S_Analysis==“*“||S_Analysis==“/“||
S_Analysis==“++“||S_Analysis==“--“||S_Analysis==“=“)//终结符为运算符
{
int i_Sequence;
i_Sequence=l.Sequence_Queue.front();//将保存读入字符类型号取出1为关键字;2为标识符
                               //3为运算符,4为double型的数,5为界限符,6为整数
if(i_Sequence!=3)
{
cout<<“运算符超出定义的范围“< }
else
{
string S_Operator;
S_Operator=l.Operator_Queue.front();//取出运算符队列的首元素与分析栈的首元素比较
if(S_Operator!=S_Analysis)    //不相同显示出错
{cout<<“运算符出错“< else                          //相同则匹配,消去
{
l.Sequence_Queue.pop();  //类型号队列首元素删除
Analysis_Stack.pop();    //分析栈首元素删除
l.Operator_Queue.pop();  //运算符队列首元素删除
}
}
}
else if(S_Analysis==“(“||S_Analysis==“)“||S_Analysis==“;“)//终结符为界限符
{
int i_Sequence;
i_Sequence=l.Sequence_Queue.front();
if(i_Sequence!=5)
{
cout<<“界限符不匹配“< }
else
{
string S_Limit;
S_Limit=l.Limit_Queue.front();//取出界限符队列的首元素与分析栈的首元素比较
if(S_Limit!=S_Analysis)    //不相同显示出错
{cout<<“界限符出错“< else                          //相同则匹配,消去
{
l.Sequence_Queue.pop();  //类型号队列首元素删除
Analysis_Stack.pop();    //分析栈首元素删除
l.Limit_Queue.pop();  //界限符队列首元素删除
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         25  2009-05-21 00:04  赋值语句的翻译\Constant.txt

     文件     505841  2009-05-20 23:59  赋值语句的翻译\Debug\Syntax_Semantic.obj

     文件     107520  2009-05-21 00:04  赋值语句的翻译\Debug\vc60.idb

     文件     159744  2009-05-20 23:59  赋值语句的翻译\Debug\vc60.pdb

     文件     651368  2009-05-20 23:59  赋值语句的翻译\Debug\语法语义分析.exe

     文件     879376  2009-05-20 23:59  赋值语句的翻译\Debug\语法语义分析.ilk

     文件    3296520  2009-05-20 23:37  赋值语句的翻译\Debug\语法语义分析.pch

     文件    1238016  2009-05-20 23:59  赋值语句的翻译\Debug\语法语义分析.pdb

     文件          0  2009-05-21 00:04  赋值语句的翻译\error.txt

     文件         69  2009-05-21 00:04  赋值语句的翻译\Identifier.txt

     文件          0  2009-05-21 00:04  赋值语句的翻译\KeyWord.txt

     文件      27025  2009-05-20 23:52  赋值语句的翻译\Lex.h

     文件         23  2009-05-21 00:04  赋值语句的翻译\LimitSign.txt

     文件         75  2009-05-21 00:04  赋值语句的翻译\Operator.txt

     文件       9201  2009-05-20 23:59  赋值语句的翻译\Syntax_Semantic.cpp

     文件          9  2009-05-20 23:57  赋值语句的翻译\test.txt

     文件       4417  2009-05-19 12:30  赋值语句的翻译\语法语义分析.dsp

     文件        532  2009-05-19 12:26  赋值语句的翻译\语法语义分析.dsw

     文件      66560  2009-05-21 00:05  赋值语句的翻译\语法语义分析.ncb

     文件      48640  2009-05-21 00:05  赋值语句的翻译\语法语义分析.opt

     文件        922  2009-05-20 23:59  赋值语句的翻译\语法语义分析.plg

     目录          0  2009-05-20 23:59  赋值语句的翻译\Debug

     目录          0  2009-05-21 00:05  赋值语句的翻译

----------- ---------  ---------- -----  ----

              6995883                    23


评论

共有 条评论