SDUT 識別浮點常量問題 編譯原理作業

2022-05-24 02:48:07 字數 1900 閱讀 9483

相當於一道模擬題吧。糾結死我了、、各種wa各種不爽。。好多情況要考慮。。自己的思維全面性,以及編碼能力還是不夠啊。。。最重要的一點就是要靜下心來。。。不能浮躁。。。

1:整個浮點數前後的空格不考慮,開始我考慮在內了所以wa了很多次。。

2:分三中情況

a: 只有小數點,無e(e)...

b:只有e(e),無小數點。。

c:既有小數點,又有e(e)..

view code

#include 

#include

#include

using

namespace std;

#define maxn 300

char str[maxn];

int main()

if (str[i] == '

e' || str[i] == 'e')

}if ((dn > 1 || en > 1) || (dn == 0 && en == 0))//

如果小數點以及e的個數存在大於1的或者都小於0

//只存在小數點,無e的情況

else

if (dn == 1 && en == 0)

if (!(str[td - 1] >= '

0' && str[td - 1] <= '

9') || td - 1

< s)//

對緊靠小數點左邊的以為檢查

bool flag = false;

for (i = s + 1; i < td; ++i)//

對小數點左邊的所有情況進行檢查

}if (flag)

if (td + 1 >= len)//

對緊靠小數點右邊的那一點檢查

flag = false;

for (i = td + 1; i < len; ++i)//

對小數點右邊的所有數檢查

}if (flag)

else}//

只有e而沒有小數點的情況

else

if (dn == 0 && en == 1)

if (!(str[te - 1] >= '

0' && str[te - 1] <= '

9') || te - 1

< s)//

對緊靠e左邊的一位進行檢查

bool flag = false;

for (i = s + 1; i < te; ++i)//

對e左邊的所有數檢查

}if (flag)

flag = false;

for (i = te + 1; i < len; ++i)//

對e後邊的所有情況進行檢查

}if (flag)

else}//

。與e都有

else

if(dn == 1 && en == 1)

if (!(str[td - 1] >= '

0' && str[td - 1] <= '

9') || td - 1

< s)//

對緊靠.左邊的一位進行檢查

bool flag = false;

for (i = s + 1; i < td; ++i)//

對.左邊的所有情況進行檢查

}if (flag)

if (td + 1 >= te)

flag = false;

for (i = td + 1; i < te; ++i)//

對.與e之間進行檢查

}if (flag)

flag = false;

for (i = te + 1; i < len; ++i)//

對e後面的所有情況進行檢查

}if (flag)

else}}

}

編譯原理實驗 識別浮點常量問題

編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣告的時候就決定了 而常量的型別需要從常量的形式來判斷。假設你是自動編譯器 acm 開發小組的一員,負責pascal語言編譯器的開發。你的任務是分析程式分...

識別浮點常量問題

time limit 1000ms memory limit 65536kb submit statistic problem description 編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣...

識別浮點常量問題

time limit 1000ms memory limit 65536kb submit statistic problem description 編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣...