移動線3線16
您還需要從結構聲明中刪除初始化 - 至少對於C(但C++編譯器並沒有想太多)。
struct stackoperator
{
char stack[10];
int top =-1;
};
要:
struct stackoperator
{
char stack[10];
int top;
};
在行動,你還需要申報 '通道'。
你還需要聲明你的函數 - 我使它們成爲靜態的。這將編譯(假設你有一個C99編譯器 - 指定的初始化不會與C89編譯器工作):
%{
#include<stdio.h>
struct stackoperator
{
char stack[10];
int top;
};
struct stackoperand
{
int stack[10][2];
int top;
};
struct stackoperator operator = { .top = -1 };
struct stackoperand operand = { .top = -1 };
int num=0;
static void push(int num,int flag);
static int pop(void);
static int precedence(char a,char b);
%}
%%
[0-9] {num=num*10+(*yytext-'0');push(num,1);}
[-+*/] {
if(precedence(operator.top,*yytext)) {
char ch=pop();
push(ch,0);
operand.stack[operand.top][1]=1;
}
push(*yytext,0);
}
[ \t] ;
[\n] {
char ch;
while(operator.top!=-1)
{
ch=pop();
push(ch,0);
}
int i=0;
while(i<=operand.top)
{
if(operand.stack[operand.top][1]==1)
printf(" %c ",operand.stack[operand.top][0]);
else
printf(" %d ",operand.stack[operand.top][0]);
}
}
%%
static void push(int num,int flag)
{
if(flag)
{ operand.top++;
operand.stack[operand.top][0]=num;
operand.stack[operand.top][1]=0;
}
else
operator.stack[++operator.top]=num;
}
static int pop(void)
{
return operator.stack[operator.top--];
}
static int precedence(char a,char b)
{
if(operator.top==-1)
return 0;
if((a=='*'||a=='/') && (b=='+'||b=='-'))
return 1;
else
return 0;
}
重新標記,以法,爲柔性標籤通常是指Adobe Flex的語言,而不是Unix編程柔性這對法語言 – 2009-11-09 19:57:07
@mawia:編譯時,它修復了所有的問題,你欠了很多人們接受了答案,也得到了贊成票。你沒有給出一個單一的接受;你還沒有給出一個加票(或者倒票)。 – 2009-11-09 21:58:21