计算器中遇到的问题
我现在在对表达式词法分析时遇到了问题:
问问谁有这个的词法分析的算法啊?
我的程序如下:
我的思想是
(1)对表达式做词法分析,Token序列存到Queue队列中
(2)把Queue队列中的中序表达式转化为后序表达式,存到Queue_L队列中
(3)对Queue_L队列存的后序表达式求值
void CCounterDlg::f_Depart()//将表达式分离:数字入栈,符号入栈,错误则显示错误,词法分析
{
int i;
for(i=0;i <strlen(m_EditAll);i++)
{
switch(m_EditAll[i])
{
case '0 ':
case '1 ':
case '2 ':
case '3 ':
case '4 ':
case '5 ':
case '6 ':
case '7 ':
case '8 ':
case '9 ':
AddToBuf(m_EditAll[i]);
break;
case '. ':
if(m_PointFlag==FALSE)
{
AddToBuf(m_EditAll[i]);
m_PointFlag=TRUE;
}
else
MessageBox( "你输入了好多小数点~~ ");
break;
case '+ ':
case '- ':
if((strlen(m_EditAll)!=0)&&(m_EditAll[strlen(m_EditAll)-1]> = '0 ')&&(m_EditAll[strlen(m_EditAll)-1] <= '9 '))
{
f_Change();
AddToToken(1);
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
else if(strlen(m_EditAll)==0||m_EditAll[strlen(m_EditAll)-1]== '( '
||m_EditAll[strlen(m_EditAll)-1]== ') ')
{
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
else
{
MessageBox( "加减号前面有运算符错误~~~ ");
}
break;
case '* ':
case '/ ':
case '^ ':
if(m_EditAll[strlen(m_EditAll)-1]> =48&&m_EditAll[strlen(m_EditAll)-1] <=57)
{
f_Change();
AddToToken(1);
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
else
MessageBox( "运算符好多... ");
break;
case '( ':
if(m_EditAll[strlen(m_EditAll)-1]> =48&&m_EditAll[strlen(m_EditAll)-1] <=57)
{
MessageBox( "括号前面的符号错误~~~ ");
}
else
{
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
break;
case ') ':
if(m_EditAll[strlen(m_EditAll)-1]> =48&&m_EditAll[strlen(m_EditAll)-1] <=57)
{
f_Change();
AddToToken(1);
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
else if(m_EditAll[strlen(m_EditAll)-1]== ') ')
{
m_TempToken.Type=m_EditAll[i];
m_TempToken.value=0;
Queue.push(m_TempToken);
}
else
MessageBox( "右括号前面出错~~ ");
}
}
}
[解决办法]
看程序好累,帮顶