C语言语义分析器代码
时间: 2023-07-09 13:17:47 浏览: 45
以下是一个简单的C语言语义分析器的代码示例,它检查输入的算术表达式是否合法,并计算表达式的值:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 1000
char input[MAX_LEN];
int pos = 0;
void error(char *msg) {
fprintf(stderr, "%s\n", msg);
exit(EXIT_FAILURE);
}
int expr();
int factor() {
int result = 0;
if (isdigit(input[pos])) {
result = input[pos] - '0';
pos++;
} else if (input[pos] == '(') {
pos++;
result = expr();
if (input[pos] == ')') {
pos++;
} else {
error("Expected ')' in expression");
}
} else {
error("Invalid character in expression");
}
return result;
}
int term() {
int result = factor();
while (input[pos] == '*' || input[pos] == '/') {
char op = input[pos];
pos++;
int rhs = factor();
if (op == '*') {
result *= rhs;
} else {
result /= rhs;
}
}
return result;
}
int expr() {
int result = term();
while (input[pos] == '+' || input[pos] == '-') {
char op = input[pos];
pos++;
int rhs = term();
if (op == '+') {
result += rhs;
} else {
result -= rhs;
}
}
return result;
}
int main() {
printf("Enter an arithmetic expression: ");
fgets(input, MAX_LEN, stdin);
input[strcspn(input, "\n")] = '\0';
int result = expr();
if (input[pos] == '\0') {
printf("Result: %d\n", result);
} else {
error("Invalid expression");
}
return 0;
}
```
这段代码实现了一个简单的语义分析器,它检查输入的算术表达式是否符合语义规则,并计算表达式的值。在主函数中,首先读取用户输入,然后调用expr函数进行语义分析和计算。如果输入表达式合法,程序输出结果;否则输出错误信息。