资源简介
预测分析法自顶向下分析如下文法:
E→E+T│T ,
T→T*F│F ,
F→(E)│i 。
程序不包含词法分析,请显式以空格分隔输入符。
代码片段和文件信息
// 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“};
//产生式列表
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
};
//预测分析表
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 < _symbol_num; 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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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
- 上一篇:半监督典型相关分析算法
- 下一篇:滴滴打车产品分析报告
相关资源
- 编译课程设计算数表达式转换成四元
- 广东工业大学编译原理试卷
- 编译原理词法分析器实验从文件读入
- 编译原理将简单程序翻译成四元式
- LALR1语法分析生成器
- 项目集规范族
- 《编译原理》实验 识别无符号数的词
- 易语言e加密模块反编译工具v3.0.1.0
- 编译原理语法分析器实验报告.doc版
- 在语法分析器的基础上构造的三地址
- 北方工业大学语法分析器 (1)完整实
- 编译原理实验词法,语法,语义
- 编译原理语法分析实验代码
- 编译原理三上机实验报告
- 预测分析表构造算法的程序实现
- 自顶向下语法分析器。。。。。。。
- 华中科技大学编译原理实验报告
- 编译原理课程设计词法分析程序
- 山东大学编译原理
- 赋值语句的翻译程序设计
- 基于预测分析表法的语法分析程序
- 编译原理中间代码生成
- LR(1)分析法从左向右扫描和自底向
- windows下的bison.exe和flex.exe
- 编译原理lex和yacc
- 编译原理词法分析+SLR语法分析+SLR语义
- 编译原理PL/0 语言编译器分析实验报告
- 语法分析实验报告
- 编译原理词法分析器语法分析器实验
- LL(1)语法分析程序
评论
共有 条评论