用c语言设计简单算数表达式语法分析器算法;(用ll(1)方式实现)
时间: 2024-02-16 11:04:30 浏览: 138
简单的c语言语法分析器
4星 · 用户满意度95%
下面是一个用C语言实现的简单算数表达式语法分析器,采用了LL(1)语法分析的方法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char lookahead;
void expr();
void term();
void factor();
void match(char expected);
void error();
void match(char expected) {
if (lookahead == expected) {
lookahead = getchar();
} else {
error();
}
}
void error() {
printf("Syntax error\n");
exit(1);
}
void factor() {
if (isdigit(lookahead)) {
match(lookahead);
} else if (lookahead == '(') {
match('(');
expr();
match(')');
} else {
error();
}
}
void term() {
factor();
while (lookahead == '*' || lookahead == '/') {
if (lookahead == '*') {
match('*');
factor();
} else if (lookahead == '/') {
match('/');
factor();
}
}
}
void expr() {
term();
while (lookahead == '+' || lookahead == '-') {
if (lookahead == '+') {
match('+');
term();
} else if (lookahead == '-') {
match('-');
term();
}
}
}
int main() {
lookahead = getchar();
expr();
if (lookahead != '\n') {
error();
}
return 0;
}
```
这个算数表达式语法分析器使用了递归下降的方法,从expr()函数开始分析输入的算数表达式。term()函数分析乘法和除法,factor()函数分析数字和括号。在match()函数中,检查当前的字符是否匹配期望的字符,如果不匹配则调用error()函数抛出语法错误异常。在main()函数中,读取输入的字符流并调用expr()函数对其进行分析。如果分析结束后输入流还有剩余,则说明语法错误。
阅读全文