LR(1)表驱动语法分析程序
/*
* LR(1) 语法分析
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include "Common.h"
#include "LRCal.h"
#include "LRMigrate.h"
#include "Stack.h" #define NEXTWORD(s) ((*(s)==0)?SYM_EOF:*((s)++)) extern char *Grammer[]; void LRParse(struct LRElement **LRTable, unsigned char *InputString)
{
printf("-------- Parse --------\n");
struct Stack *SymbolStack = BuildStack();
Push(SymbolStack, ); // push $;
Push(SymbolStack, ); // push start state s0;
int Word = NEXTWORD(InputString); // word <- NextWord();
int State = ;
while (true) // while (true)
{
State = Top(SymbolStack); // state <- top of stack;
printf("State: %d\tWord: %c \t", State, Word);
if (LRTable[State][Word].Action == Reduce) // if (Action[state, word] = "reduce A->β")
{
printf("reduce %d", (int)LRTable[State][Word].ActionValue); char *Production = Grammer[LRTable[State][Word].ActionValue - ];
int ProductSize = strlen(Production) - ;
// pop 2*|β| symbols;
ProductSize *= ;
while (ProductSize--)
{
Pop(SymbolStack);
}
// state <- top of stack;
State = Top(SymbolStack);
// push A;
int LeftUnterminal = (int)Production[];
Push(SymbolStack, LeftUnterminal);
// push Goto[State, A];
Push(SymbolStack, (int)LRTable[State][LeftUnterminal].ActionValue);
}
else if (LRTable[State][Word].Action == Shift) // else if (Action[state, word] = "shift si")
{
printf("shift %d", (int)LRTable[State][Word].ActionValue);
// push word;
Push(SymbolStack, Word);
// push si;
Push(SymbolStack, LRTable[State][Word].ActionValue);
// word <- NextWord();
Word = NEXTWORD(InputString);
}
else if (LRTable[State][Word].Action == Accept) // else if (Action[state, word] = "accept")
{
printf("accept\n");
break;
}
else
{
printf("Syntax Error!\n");
exit();
}
printf("\n");
}
printf("Grammer Parse Success!\n");
}
全部代码文件:http://files.cnblogs.com/rexfield/LR.zip
LR(1)表驱动语法分析程序的更多相关文章
- LR(1)表驱动语法分析设计图表
- Tomcat内核之ASCII解码的表驱动模式
我们知道Tomcat通信是建立在Socket的基础上,而套接字在服务器端和客户端传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样 ...
- 表驱动方法(Table-Driven Methods)
表驱动方法(Table-Driven Methods) - winner_0715 - 博客园 https://www.cnblogs.com/winner-0715/p/9382048.html W ...
- Table-Driven Design 表驱动设计
注:本文所有代码来自 http://www.codeproject.com/Articles/42732/Table-driven-Approach 在许多程序中,经常需要处理那些拥有种种色色不同特性 ...
- Mysql优化原则_小表驱动大表IN和EXISTS的合理利用
//假设一个for循环 ; $i < ; $i++) { ; $i < ; $j++) { } } ; $i < ; $i++) { ; $i < ; $j++) { } } ...
- 如何使用Microsoft的驱动程序验证程序解释无法分析的崩溃转储文件
这篇文章解释了如何使用驱动程序验证工具来分析崩溃转储文件. 使用Microsoft驱动程序验证工具 如果您曾经使用Windows的调试工具来分析崩溃转储,那么毫无疑问,您已经使用WinDbg打开了一个 ...
- html表单验证程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- LR(1)表生成算法演示程序
/* * LR 转换表 * + Goto 记录表 * + 状态转换表 */ #include <stdio.h> #include <stdlib.h> #include &l ...
- [lua]原来这才是表驱动的正确表达方式
曾经写了个很煞笔的脚本模拟switch..case语法形式.[lua]尝试一种Case语法糖 而今实际项目应用中突发,原来这才是正确的表驱动方式表达.如下所贴: function event_do( ...
随机推荐
- CSS伪类对象before和after的用法
一直感觉这两个伪类对象不是很重要,并且IE对它两兄弟并不支持,所以也没有怎么静下心来研究,只有在清楚浮动clearfix的时候会用到哈,其他都很 少用!不过最近在研究css3的时候觉得它两个的搭配不仅 ...
- SVG绘制矩形简单示例分享
最近我初学HTML5,刚在一步步学习SVG,积累了一些个人心得和程序代码,希望和大家分享,今天分享“svg之矩形”部分 1.简单矩形 效果图如下: 关键代码: <svg xmlns=" ...
- php会话控制cookie/session
设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...
- textarea出现多余的空格
今天使用textarea标签,调用数据的时候,出现一些多余的空格,如何改变属性都不能够经过某属性将空格去掉,经过查询,看了zuyi532的专栏(http://blog.csdn.net/zuyi532 ...
- PHP-Wamp集成包安装教程
在Windows平台上搭建PHP的开发环境可以下载WAMP(Windows.Apache.MySQL.PHP的首字母缩写)集成化安装包.这样就不需要单独安装Apache.MySQL和PHP了. 这款软 ...
- c#指针用法示例。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- notepad++ :正则表达式系统教程
前言&索引 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题. 索 ...
- Prism vs MvvmCross
Prism vs MvvmCross 在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现 ...
- Linq学习之旅——LINQ查询表达式
1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 ...
- Hdu 2979 Expensive Drink
Description There are some water, milk and wine in your kitchen. Your naughty little sister made som ...