概述解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问题的实例将对应为该语言中的句子。此时,可以使用解释器模式来设计这种新的语言。对解释器模式的学习能够加深我们对面向对象思想的理解,并且掌握编程语言中文法规则的解...
分类:
其他好文 时间:
2015-08-26 12:08:18
阅读次数:
195
解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。
解释器模式的结构
下面就以一个示意性的系统为例,讨论解释器模式的结构。系统的结构图如下所示:
模式所涉及的角色如下所示:
(1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。...
分类:
编程语言 时间:
2015-08-21 19:30:36
阅读次数:
254
1.特点:若某特定问题发生的频率足够高时考虑,需定义文法表示与解释器本身。2.概念:在软件开发特别是DSL开发中常常需要使用一些相对较复杂的业务语言,如果业务语言使用频率足够高,且使用普通的编程模式来实现会导致非常复杂的变化,那么就可以考虑使用解释器模式构建一个解释器对复杂的业务语言进行翻译。这种做...
分类:
其他好文 时间:
2015-08-14 11:14:41
阅读次数:
141
【问题描述】把输入的文法存储在计算机内。【基本要求】1、输入上下文无关文法的一组产生式。2、将文法按顺序或链式结构存储在计算机内。3、输出文法的四要素:终极符集合、非终极符集合、规则式集合和开始符。4、开始符在输入时指明,否则将所输入第一条规则式的左部符号视为开始符。例如输入如下文法:E->E+T|...
分类:
其他好文 时间:
2015-08-05 21:42:30
阅读次数:
190
LR1文法全智能分析
// by hfut yzk#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#pragma region vars
struct xiangmu //一个项目
{
...
分类:
其他好文 时间:
2015-07-31 10:40:07
阅读次数:
170
闲来无事,就把龙书拿出来有看了看,把最近学的总结一下。
FIRST(X)集合定义:可从X推导得到的串的首符号的集合,其中X是任意文法符号。如果X=>······=>ε ,那么ε也在FIRST(X)中。(定义来自龙书)
算法伪代码(非准确版):
foreach(nonterminal N)
FIRST(N) = {}
while(some set is changing)
foreach (production p: N->β1 … βn)
if (β1== a …)
FIRST(N)∪...
分类:
其他好文 时间:
2015-07-29 23:07:47
阅读次数:
273
结构意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。适用性当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此...
分类:
其他好文 时间:
2015-07-22 09:14:11
阅读次数:
87
语法分析器的知识框图懒得详细总结了。简单说下LR以及LL算法。 LR与LL代表两种对语法的分析方法,第一个字母代表程序的读入顺序,即从左向右读,第二个代表规则的推导,LR代表从右向左推导,LL代表从左向右推导。后边如果有数字的话,代表前看符号。LR算法相比较LL则可以分析更多的文法,也不需要进行一....
分类:
其他好文 时间:
2015-07-21 20:27:54
阅读次数:
212
一个源程序运行得到结果一般都要经过编译和执行的过程,C语言的编译和执行过程如下:
编译的过程:
编译的功能是将人们能看懂的高级语言,转换成计算机能看懂的二进制语言,可以分为下面的六个阶段:
词法分析阶段:根据语言的词法规则来进行分析,词法的规则可用正规文法或正规式来表示是指有限自动机能识别正规文法的语言和正规式组成的集合。
语法分析阶段:在词法分析的基础上将单词分别分解成各类语法单位,它依据语言...
分类:
编程语言 时间:
2015-07-16 11:55:41
阅读次数:
189
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示解释语言中的句子。
首先定义一个抽象的解释接口AbstractExpressionpublic abstract class AbstractExpression { public abstract void interpret(Contexts context);
}接着定义终结符表达式Terminal...
分类:
其他好文 时间:
2015-07-14 15:38:49
阅读次数:
97