实验要求 利用c语言编制递归下降分析程序,并对简单语句进行语法分析。 1. 待分析的简单语言的语法 用扩充的BNF表示如下: (1)<程序> :: =begin<语句串>end 实验要求说明 输入单词串,以”#”结束,如果是文法正确的句子,则输出成功的信息,打印“success”,否则输出”error” 例如: 输入 begin a:=9;x:=2*3;b:=a+x; end# 输出 success 输入 x:=a+b*c; end# 输出 error
时间: 2024-02-12 14:03:49 浏览: 175
以下是一个简单的递归下降分析程序,用于分析输入的简单语言:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_LENGTH 100
char input[MAX_LENGTH];
int index = 0;
int match(char c) {
if (input[index] == c) {
index++;
return 1;
}
return 0;
}
int program(void);
int statement_list(void);
int statement(void);
int assignment_statement(void);
int expression(void);
int term(void);
int factor(void);
int program() {
if (match('b') && match('e') && match('g') && match('i') &&
match('n') && statement_list() && match('e') && match('n') && match('d')) {
return 1;
}
return 0;
}
int statement_list() {
if (statement()) {
while (match(';') && statement()) {
// do nothing
}
return 1;
}
return 0;
}
int statement() {
return assignment_statement();
}
int assignment_statement() {
if (match('I') && match('D') && match(':') && expression()) {
return 1;
}
return 0;
}
int expression() {
if (term()) {
while ((match('+') || match('-')) && term()) {
// do nothing
}
return 1;
}
return 0;
}
int term() {
if (factor()) {
while ((match('*') || match('/')) && factor()) {
// do nothing
}
return 1;
}
return 0;
}
int factor() {
if (isdigit(input[index])) {
while (isdigit(input[index])) {
index++;
}
return 1;
} else if (match('(') && expression() && match(')')) {
return 1;
} else {
return 0;
}
}
int main() {
printf("请输入待分析的简单语句(以#结束):\n");
scanf("%s", input);
if (program() && match('#')) {
printf("success\n");
} else {
printf("error\n");
}
return 0;
}
```
该程序使用递归下降分析方法对输入的简单语言进行语法分析。具体来说,它按照语法规则逐个分析输入单词,如果遇到不符合语法规则的单词,则输出"error",否则输出"success"。
阅读全文