用户任意输入一个正确的算术表示式,程序将其转换成间接三元式输出;c语言
时间: 2023-08-13 07:03:08 浏览: 85
以下是将算术表达式转换为间接三元式的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_EXPR_LEN 100
typedef struct {
char op;
int arg1;
int arg2;
} Quad;
Quad quad_list[MAX_EXPR_LEN];
int quad_count = 0;
int stack[MAX_EXPR_LEN];
int top = -1;
int get_token(char* expr, int* index) {
// 获取下一个 token
while (isspace(expr[*index])) {
(*index)++;
}
if (expr[*index] == '\0') {
return -1;
}
if (isdigit(expr[*index])) {
int num = 0;
while (isdigit(expr[*index])) {
num = num * 10 + (expr[*index] - '0');
(*index)++;
}
return num;
} else {
return expr[(*index)++];
}
}
void push(int val) {
stack[++top] = val;
}
int pop() {
return stack[top--];
}
void emit(char op, int arg1, int arg2) {
quad_list[quad_count].op = op;
quad_list[quad_count].arg1 = arg1;
quad_list[quad_count].arg2 = arg2;
quad_count++;
}
int main() {
char expr[MAX_EXPR_LEN];
printf("请输入一个算术表达式:");
fgets(expr, MAX_EXPR_LEN, stdin);
int index = 0;
int token = get_token(expr, &index);
while (token != -1) {
if (isdigit(token)) {
push(token);
} else if (token == '+' || token == '-' || token == '*' || token == '/') {
int arg2 = pop();
int arg1 = pop();
emit(token, arg1, arg2);
int temp = quad_count - 1;
push(temp);
}
token = get_token(expr, &index);
}
printf("间接三元式:\n");
for (int i = 0; i < quad_count; i++) {
Quad q = quad_list[i];
printf("(%c, %d, %d)\n", q.op, q.arg1, q.arg2);
}
return 0;
}
```
该程序首先读取用户输入的算术表达式,然后通过 `get_token` 函数逐个获取表达式中的 token。如果是数字,则将其压入栈中;如果是运算符,则从栈中弹出两个操作数并生成一个间接三元式,将新生成的间接三元式的编号压入栈中。
最终,程序输出生成的间接三元式。
阅读全文