資源簡(jiǎn)介
預(yù)測(cè)分析法自頂向下分析如下文法:
E→E+T│T ,
T→T*F│F ,
F→(E)│i 。
程序不包含詞法分析,請(qǐng)顯式以空格分隔輸入符。

代碼片段和文件信息
//?PreAna.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?
#include?“ProAnaDef.h“
using?namespace?std;
int?_symbol_num?=?13;
//????????????????????????????????????0???1????2????3????4????5????6????7????8?????9????10???11?????12
char?_symbol[16][MAX_SYMBOL_NAME]?=?{““?“+“?“*“?“(“?“)“?“i“?“#“?“E“?“E‘“?“T“?“T‘“?“F“?“null“};
//產(chǎn)生式列表
int?_profom[][MAX_PROFOR_NAME]?=?{
//00
//E‘→?+TE‘?
1?9?8?0?0?0
//01
//T‘→?null
12?0?0?0?00?
//02
//T‘→?*FT‘
2?11?10?0?0?0
//03
//E?→?TE‘
9?8?0?0?0?0
//04
//T?→?FT‘
11?10?0?0?0?0
//05
//F?→?(?E?)
3?7?4?0?0?0
//06
//E‘→?null
12?0?0?0?0?0
//07
//T‘→?null
12?0?0?0?0?0
//08
//E?→?TE‘
9?8?0?0?0?0
//09
//T?→?FT‘
11?10?0?0?0?0
//10
//F?→?i?
5?0?0?0?0?0
//11
//E‘→?null
12?0?0?0?0?0
//12
//T‘→?null
12?0?0?0?0?0
};
//預(yù)測(cè)分析表
int?_pre_table[5][6]?=?{
-1 -1 3 -1 8 -1
0 -1 -1 6 -1 11?
-1 -1 4 -1 9 -1
1 2 -1 7 -1 12?
-1 -1 5 -1 10 -1
};
//env
int?_top?=?0;
int?_stack[256]?=?{0};
int?_coming_token?=?0;
//int?_stack_top_token?=?0;
//functions
int?ComingToken()
{
return?_coming_token;
}
//
char?_unknown_symbol[MAX_SYMBOL_NAME]?=?{0};
void?SetUnknownSymbol(const?char*?pBuf)
{
strcpy_s(_unknown_symbol?MAX_SYMBOL_NAME?pBuf);
}
void?GetUnknownSymbol(char?buf[]?const?int?size)
{
strcpy_s(buf?size?_unknown_symbol);
}
//last?error
int?_ana_error_code?=?0;
//
void?Leave(int?err)
{
_ana_error_code?=?err;
throw?err;
}
//
//stack?support
int?StackGet()
{
if?(_top?<=?0)
{
Leave(ANA_ERROR_STACK_EMPTY);
}
return?_stack[_top?-?1];
}
void?StackPush(int?val)
{
_stack[_top++]?=?val;
}
int?StackPop()
{
if?(_top?<=?0)
{
Leave(ANA_ERROR_STACK_EMPTY);
}
return?_stack[--_top];
}
bool?StackEmpty()
{
return?(_top?==?0);
}
int?StackElements()
{
return?_top;
}
int?StackAt(int?index)
{
return?_stack[index];
}
bool?StrEqual(char?src[]?char?tar[])
{
if?(0?==?strcmp(src?tar))
{
return?true;
}
return?false;
}
int?MapSymbolId(char?sym[])
{
int?i?=?0;
for?(i?=?1;?i? {
if?(StrEqual(sym?_symbol[i]))
{
return?i;
}
}
return?0;
}
void?MapSymbolName(char?buf[]?int?size?int?id)
{
if?(0?!=?strcpy_s(buf?size?_symbol[id]))
{
throw?id;
}
}
bool?IsSymbolT(int?symId)
{
if?(symId?>?0?&&?symId?6)
{
return?true;
}
return?false;
}
int?SymbolNull()
{
return?12;
}
bool?IsSymbolNull(int?symId)
{
if?(symId?==?SymbolNull())
{
return?true;
}
return?false;
}
int?SymbolEnd()
{
return?6;
}
bool?IsSymbolEnd(int?symId)
{
if?(symId?==?SymbolEnd())
{
return?true;
}
return?false
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????65536??2011-12-11?23:27??PreAna\Debug\PreAna.exe
?????文件???????5985??2011-12-11?23:24??PreAna\PreAna\PreAna.cpp
?????文件???????4449??2011-12-11?20:33??PreAna\PreAna\PreAna.vcxproj
?????文件???????1521??2011-12-11?20:33??PreAna\PreAna\PreAna.vcxproj.filters
?????文件????????143??2011-12-11?15:40??PreAna\PreAna\PreAna.vcxproj.user
?????文件???????4139??2011-12-11?23:26??PreAna\PreAna\PreAnaShow.cpp
?????文件????????253??2011-12-11?20:35??PreAna\PreAna\ProAnaDef.h
?????文件???????1708??2011-12-11?15:40??PreAna\PreAna\ReadMe.txt
?????文件????????293??2011-12-11?15:40??PreAna\PreAna\stdafx.cpp
?????文件????????320??2011-12-11?15:40??PreAna\PreAna\stdafx.h
?????文件????????314??2011-12-11?15:40??PreAna\PreAna\targetver.h
?????文件???????1336??2011-12-11?21:56??PreAna\PreAna.sln
????..A..H.?????12800??2011-12-12?00:30??PreAna\PreAna.suo
?????目錄??????????0??2011-12-22?11:59??PreAna\Debug
?????目錄??????????0??2011-12-22?11:59??PreAna\ipch
?????目錄??????????0??2011-12-22?12:00??PreAna\PreAna
?????目錄??????????0??2011-12-22?11:59??PreAna
-----------?---------??----------?-----??----
????????????????98797????????????????????17
評(píng)論
共有 條評(píng)論