#include<stdio.h>
#include<string.h>
void factor(); //元素:整数、标识符、括号中内容
void expr(); //表达式
void term1(); //*、/factor()
void term2(); //+、-(facter()term2)
void rest();
char ch;
int linenum=0;
void del_blank() //跳过空格、换行符、制表符
{
while(ch==' '||ch=='\n'||ch=='\t')
{
if(ch=='\n')
linenum++;
else
ch=getchar();
}
return;
}
void pr_error() //错误提示函数
{
printf("syntax error");
return;
}
void factor()
{
int i;
char a[100];
del_blank();
if(ch=='#')
return;
else if(ch=='(')
{
ch=getchar();expr();ch=getchar();
}
else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'||ch=='_')
{
i=0;
a[i++]=ch;
ch=getchar();
while(true)
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'||ch>='0'&&ch<='9'||ch=='_')
{
a[i++]=ch;
ch=getchar();
}
else
break;
}
a[i]='\0';
printf("<id,");
printf("%s",a);
printf(">");
}
else if(ch>='0'&&ch<='9')
{ i=0;
a[i++]=ch;
ch=getchar();
while(true)
{
if( ch>='0'&&ch<='9')
{
a[i++]=ch;
ch=getchar();
}
else
break;
}
a[i]='\0';
printf("<num,");
printf("%s",a);
printf(">");
}
else
pr_error();
return;
}
void expr()
{
factor();rest();return;
}
void rest()
{
term1();term2();return;
}
void term1()
{
while(true){del_blank();
switch(ch)
{
case '#':return;
case '*':ch=getchar();factor();printf("*");break;
case '/':ch=getchar();factor();printf("/");break;
default:return;
}}
}
void term2()
{
while(true)
switch(ch)
{
case '#':return;
case '+':ch=getchar();factor();term1();printf("+");break;
case '-':ch=getchar();factor();term1();printf("-");break;
case ')':return;
default:pr_error();return;
}
return;
}
int main()
{
printf("输入表达式,并以#结束:\n");
ch=getchar();
printf("后缀表达式:");
expr();
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
构造一个中缀表达式到后缀表达式的翻译器 表达式文法及其翻译模式定义如下: expr expr + term {print(‘+’)} | expr - term {print(‘-’)} | term term term * factor {print(‘*’)} | term / factor {print(‘/’)} | factor factor ( expr ) | id {print(id.lexeme)} | num {print(num.value)}
资源推荐
资源详情
资源评论
收起资源包目录
表达式翻译器.zip (2个子文件)
实验一 表达式翻译器
实验一 表达式翻译器.doc 45KB
hl_1.cpp 2KB
共 2 条
- 1
资源评论
- 小小二-yan2023-07-27文件中提供了一些有用的示例,帮助读者更好地理解如何使用表达式翻译器来解决问题。
- SLHJ-Translator2023-07-27总体而言,这个文件将表达式翻译器的实现过程讲解得清晰明了,对提高读者的编程水平有一定的帮助。
- 一曲歌长安2023-07-27作者在文件中提到了一些常见的注意事项和细节,指导读者避免一些潜在的错误。
- lowsapkj2023-07-27这个文件以简单易懂的语言描述了如何使用c语言实现表达式翻译器,对于初学者来说很友好。
- 丽龙2023-07-27这个文件提供了一个简洁有效的表达式翻译器,让人们能轻松转换c语言的表达式。
jessiejessie77
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity Easy Color Picker 2.2.1
- 基于Django和Hadoop集群进行的大数据分析平台
- openEuler-22.03-LTS-SP3-netinst-x86-64-dvd.iso
- AL-2023-4卷习题-文本文件
- openEuler-22.03-LTS-SP3-netinst-aarch64-dvd.iso
- openEuler-20.03-LTS-SP4-netinst-aarch64-dvd.iso
- 基于vue3.0的大数据分析系统,包含各种echarts和vue3.0新API
- 基于Java 实现WIFI探针的商业大数据分析技术(获得附近的人流量、入店量、驻留时长等信息 )
- Data$distriLecturer.class
- SECS移动解决方案 SECS如何实现扫码功能 SECS安卓APP SECS PDA应用 安卓版本SECS协议应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功