编译原理用c语言实现逆波兰式实验
时间: 2023-10-10 11:13:01 浏览: 113
编译原理中逆波兰式的生成实验
下面是使用 C 语言实现逆波兰式的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack overflow.\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
char expr[100];
printf("Enter an expression in postfix notation: ");
scanf("%[^\n]%*c", expr);
Stack s;
init_stack(&s);
char *p = expr;
while (*p) {
if (*p >= '0' && *p <= '9') {
push(&s, *p - '0');
} else if (*p == '+') {
int a = pop(&s);
int b = pop(&s);
push(&s, a + b);
} else if (*p == '-') {
int a = pop(&s);
int b = pop(&s);
push(&s, b - a);
} else if (*p == '*') {
int a = pop(&s);
int b = pop(&s);
push(&s, a * b);
} else if (*p == '/') {
int a = pop(&s);
int b = pop(&s);
push(&s, b / a);
}
p++;
}
int result = pop(&s);
printf("Result: %d\n", result);
return 0;
}
```
这段代码使用栈实现了逆波兰式的计算。首先读入一个表达式,然后遍历表达式的每个字符,如果是数字则入栈,如果是运算符则弹出栈顶的两个元素进行计算,并将结果入栈。最后栈中剩下的元素就是表达式的计算结果。
阅读全文