1223 递归
2015-12-30 16:46
387 查看
#include<stdio.h>
char curr;
char LL1[1000];
int N=-1;
void fanyi(){
N++;
if(LL1
== ' '){
N++;
}else{
curr = LL1
;
}
}
void panduan1(){
panduan2();
char1();
}
void zifu(){
if(curr == '('){
fanyi();
panduan1();
if(curr == ')'){
fanyi();
}else{
printf("%d %c之后的文法有错!\n",N,curr);
}
}else{
while(1){
if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){
fanyi();
}else{
break;
}
}
}
}
void char2(){
if(curr == '*'){
fanyi();
zifu();
panduan2();
}else if(curr == '/'){
fanyi();
zifu();
panduan2();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
printf("%d %c之后的文法有错!\n",N,curr);
}
}
void panduan2(){
zifu();
char2();
}
void char1(){
if(curr == '+'){
fanyi();
panduan2();
char1();
}
else if(curr == '-'){
fanyi();
panduan2();
char1();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
printf("%d %c之后的文法有错!\n",N,curr);
}
}
main()
{ char ch;
int i=0;
printf("请输入需要分析的curr语法:(以#结束)\n");
do{
scanf("%c",&ch);
LL1[i] = ch;
i++;
}while(ch != '#');
fanyi();
panduan1();
if(curr == '#')
printf("成功!\n");
else{
printf("文法有误!!\n");
printf("%d %c之后的文法有错!\n",N,curr);
}
}
char curr;
char LL1[1000];
int N=-1;
void fanyi(){
N++;
if(LL1
== ' '){
N++;
}else{
curr = LL1
;
}
}
void panduan1(){
panduan2();
char1();
}
void zifu(){
if(curr == '('){
fanyi();
panduan1();
if(curr == ')'){
fanyi();
}else{
printf("%d %c之后的文法有错!\n",N,curr);
}
}else{
while(1){
if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){
fanyi();
}else{
break;
}
}
}
}
void char2(){
if(curr == '*'){
fanyi();
zifu();
panduan2();
}else if(curr == '/'){
fanyi();
zifu();
panduan2();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
printf("%d %c之后的文法有错!\n",N,curr);
}
}
void panduan2(){
zifu();
char2();
}
void char1(){
if(curr == '+'){
fanyi();
panduan2();
char1();
}
else if(curr == '-'){
fanyi();
panduan2();
char1();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
printf("%d %c之后的文法有错!\n",N,curr);
}
}
main()
{ char ch;
int i=0;
printf("请输入需要分析的curr语法:(以#结束)\n");
do{
scanf("%c",&ch);
LL1[i] = ch;
i++;
}while(ch != '#');
fanyi();
panduan1();
if(curr == '#')
printf("成功!\n");
else{
printf("文法有误!!\n");
printf("%d %c之后的文法有错!\n",N,curr);
}
}
相关文章推荐
- 实验五 虚拟内存页面置换算法
- Java类集学习(五)集合的输出
- 操作-postgre安装
- 070 - Climbing Stairs
- diamond淘宝框架使用
- WeUI logo专为微信设计的 UI 库 WeUI
- AngularJS基础——工具方法
- Android中View的setTag和getTag方法简述
- 深入研究mysql中group by与order by取分类最新时间内容
- POJ-3662 Telephone Lines
- Anaconda 32在windows下安装gensim
- 关于Android的.so文件所需要知道的
- 实战2--应用EL表达式显示投票结果
- 译文:前端性能的重要性 The Importance of Frontend Performance
- 有限自动机与构造
- PHP静态延迟绑定
- 【转】GATK使用方法详解(包含bwa使用)
- 数据结构课程期末总结二
- python --study address
- MVC文章汇总