LR语法分析器程序设计计算机等级考试
文章作者 100test 发表时间 2009:07:07 23:25:34
来源 100Test.Com百考试题网
#include <.fstream.h>.
#include <.iostream.h>.
#include <.stdlib.h>.
#include <.string.h>.
struct code_val{
char code.char val[20].
}.
const char *p[]={ //产生式
"S→E","E→E T","E→T","T→T*F","T→F","F→(E)","F→i"
}.
const char TNT[ ]=" *()i#ETF". //LR分析表列的字符
const int M[][9]={ // LR分析表数字化,
列字符 *()i#ETF用数字012345678标识。
{ 0, 0, 4, 0, 5,0, 1, 2, 3}, //0表示出错,s4用4表示。
{ 6, 0, 0, 0, 0,99}, //Acc用99表示
{-2, 7, 0,-2, 0,-2}, //r2用-2表示
{-4,-4, 0,-4, 0,-4},
{ 0, 0, 4, 0, 5, 0, 8, 2, 3},
{-6,-6, 0,-6, 0,-6},
{ 0, 0, 4, 0, 5, 0, 0, 9, 3},
{ 0, 0, 4, 0, 5, 0, 0, 0,10},
{ 6, 0, 0,11},
{-1, 7, 0,-1, 0,-1},
{-3,-3, 0,-3, 0,-3},
{-5,-5, 0,-5, 0,-5}
}.
int col(char). //列定位函数原型
void main()
{
int state[50]={0}. //状态栈初值
char symbol[50]={ # }. //符号栈初值
int top=0. //栈顶指针初值
ofstream cout("par_r.txt"). //语法分析结果输出至文件par_r.txt
ifstream cin("lex_r.txt"). // 从lex_r.txt中输入词法分析结果
struct code_val t. //结构变量,存放单词二元式。
cin>.>.t.code>.>.t.val. //读一单词
int action.
int i,j=0. //输出时使用的计数器,并非必要。
cout<.<."step"<.<.