语法分析实验ll算法c语言,实验5LL语法分析程序的设计与实现(C语言).doc
實驗5LL語法分析程序的設計與實現(C語言)
實驗五 LL(1)文法識別程序設計
一、實驗目的
通過LL(1)文法識別程序的設計理解自頂向下的語法分析思想。
E+T|T
TT*F|F
Fi|(E)
參考代碼
為了更好的理解代碼,建議將圖5.11做如下標注:
/* 程序名稱: LL(1)語法分析程序 */
/* E->E+T|T */
/* T->T*F|F */
/* F->(E)|i */
/*目 的: 對輸入LL(1)文法字符串,本程序能自動判斷所給字符串是否為所給文法的句子,并能給出分析過程。
/********************************************/
/* 程序相關說明 */
/* A=E' B=T' */
/* 預測分析表中列號、行號 */
/* 0=E 1=E' 2=T 3=T' 4=F */
/* 0=i 1=+ 2=* 3=( 4=) 5=# */
/************************************/
#include"iostream"
#include "stdio.h"
#include "malloc.h"
#include "conio.h"
/*定義鏈表這種數據類型參見:
/link?url=_owQzf8PRZOt9H-5oXIReh4X0ClHo6zXtRdWrdSO5YBLpKlNvkCk0qWqvFFxjgO0KzueVwEQcv9aZtVKEEH8XWSQCeVTjXvy9lxLQ_mZXeS###*/
struct Lchar{
char char_ch;
struct Lchar *next;
}Lchar,*p,*h,*temp,*top,*base;
/*p指向終結符線性鏈表的頭結點,h指向動態建成的終結符線性鏈表節點,top和base分別指向非終結符堆棧的頂和底*/
char curchar; //存放當前待比較的字符:終結符
char curtocmp; //存放當前棧頂的字符:非終結符
int right;
int table[5][6]={{1,0,0,1,0,0},
{0,1,0,0,1,1},
{1,0,0,1,0,0},
{0,1,1,0,1,1},
{1,0,0,1,0,0}};/*存放預測分析表,1表示有產生式,0表示無產生式。*/
int i,j;
void push(char pchar) /*入棧函數*/
{
temp=(struct Lchar*)malloc(sizeof(Lchar));
temp->char_ch=pchar;
temp->next=top;
top=temp;
}
void pop(void) /*出棧函數*/
{
curtocmp=top->char_ch;
if(top->char_ch!='#')
top=top->next;
}
void doforpush(int t) /*根據數組下標計算的值找對應的產生式,并入棧*/
{
switch(t)
{
case 0:push('A');push('T');break;
case 3:push('A');push('T');break;
case 11:push('A');push('T');push('+');break;
case 20:push('B');push('F');break;
case 23:push('B');push('F');break;
case 32:push('B');push('F');push('*');break;
case 40:push('i');break;
case 43:push(')');push('E');push('(');
}
}
/*根據curchar和curtocmp轉為數字以判斷是否有產生式*/
void changchartoint()
{
switch(curtocmp) /*非終結符:棧頂*/
{
case 'E':i=0;break;
case 'A':i=1;break;
case 'T':i=2;break;
case 'B':i=3;break;
case 'F':i=4;
}
switch(curchar) /*終結符:待識別的表達式中*/
{
case 'i':j=0;break;
case '+':j=1;break;
case '*':j=2;break;
case '(':j=3;break;
case ')':j=4;break;
case '#':j=5;
}
}
/*識別算法*/
void dosome(void)
{
int t;
for(;;)
{
pop();/*讀取棧頂的字符存curtocmp中*
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的语法分析实验ll算法c语言,实验5LL语法分析程序的设计与实现(C语言).doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言程序如何转化成c语言,如何把汇编
- 下一篇: android服务绑定音乐播放器,And