ll(1)语法分析程序设计c++代码
时间: 2023-11-24 13:02:55 浏览: 123
编译原理LL1语法分析器(C++版)源代码
5星 · 资源好评率100%
LL(1)语法分析程序设计是一种自顶向下的分析方法,通过预测分析表中的指导符号与输入符号进行匹配,从而判断输入串是否符合给定文法。下面是一个简单的LL(1)语法分析程序设计的C代码示例:
```c
#include <stdio.h>
#include <string.h>
char input[100]; // 输入串
int length = 0; // 输入串长度
int currentIndex = 0; // 当前读取字符的下标
char lookahead; // 当前预测字符
// 预测分析表
char predictionTable[3][4] = {
{'=', 'i', '(', ')'},
{'i', 'N', 'N', 'N'},
{'E', '=', 'T', 'F'}
};
// 判断是否为终结符
int isTerminal(char c) {
if (c == '=' || c == 'i' || c == '(' || c == ')') {
return 1;
}
return 0;
}
// 判断是否为非终结符
int isNonTerminal(char c) {
if (c == 'N' || c == 'E' || c == 'T' || c == 'F') {
return 1;
}
return 0;
}
// 获取下一个字符
void getNextChar() {
lookahead = input[currentIndex];
currentIndex++;
}
// LL(1)语法分析程序
int ll1Parser() {
getCurrentChar();
if (lookahead == '=') {
getNextChar();
if (lookahead == 'i') {
getNextChar();
if (lookahead == '(') {
getNextChar();
if (lookahead == ')') {
return 1; // 输入串符合给定文法
}
}
}
}
return 0; // 输入串不符合给定文法
}
int main() {
printf("请输入一个待分析的表达式:");
scanf("%s", input);
length = strlen(input);
if (ll1Parser()) {
printf("输入串符合给定文法\n");
} else {
printf("输入串不符合给定文法\n");
}
return 0;
}
```
以上代码实现了一个简单的LL(1)语法分析程序,该程序通过将预测分析表与输入串进行匹配,判断输入串是否符合给定的文法。如果输入串符合文法,则输出"输入串符合给定文法";如果不符合,则输出"输入串不符合给定文法"。
阅读全文