php网站怎么做集群,wordpress添加产品图,搜索引擎优化的五个方面,wordpress huifu软件体系结构的第二次实验#xff08;解释器风格与管道过滤器风格#xff09; 一、实验目的 1#xff0e;熟悉体系结构的风格的概念 2#xff0e;理解和应用管道过滤器型的风格。 3、理解解释器的原理 4、理解编译器模型 二、实验环境 硬件#xff1a; 软件#xff1a;P… 软件体系结构的第二次实验解释器风格与管道过滤器风格 一、实验目的 1熟悉体系结构的风格的概念 2理解和应用管道过滤器型的风格。 3、理解解释器的原理 4、理解编译器模型 二、实验环境 硬件 软件Python或任何一种自己喜欢的语言 三、实验内容 1、实现“四则运算”的简易翻译器。 结果要求 1实现加减乘除四则运算允许同时又多个操作数如23*5-6 结果是11 2被操作数为整数整数可以有多位 3处理空格 4输入错误显示错误提示并返回命令状态“CALC” 图1 实验结果示例 加强练习 1、有能力的同学可以尝试实现赋值语句例如x23*5-6返回x11。注意要实现解释器的功能而不是只是显示 2、尝试实现自增和自减符号例如x 2、采用管道-过滤器Pipes and Filters风格实现解释器 图2 管道-过滤器风格 图 3 编译器模型示意图 本实验实现的是词法分析和语法分析两个部分。 四、实验步骤 代码 # coding: UTF-8#编码格式
INTEGER,PLUS,MINUS,MUL,DIV,LPAREN,RPAREN,EOF(INTEGER,PLUS,MINUS,MUL,DIV,LPAREN,RPAREN,EOF)class Token(object):def __init__(self,type,value):self.typetypeself.value valuedef __str__(self):return Token({type},{value}).format(type self.type,value self.value)class Lexer(object):
# 词法分析器
# 给每个词打标记def __init__(self, text):self.texttextself.pos0self.current_charself.text[self.pos]def error(self):raise Exception(Invalid Char)def advance(self):#往下走取值self.pos1if self.poslen(self.text)-1:self.current_charNoneelse:self.current_charself.text[self.pos]def integer(self):#多位整数处理resultwhile self.current_char is not None and self.current_char.isdigit():resultresultself.current_char#往下走取值self.advance()return int(result)def deal_space(self):while self.current_char is not None and self.current_char.isspace():self.advance()def get_next_token(self):#打标记:1pos1,2返回Token(类型数值while self.current_char is not None:if self.current_char.isspace():self.deal_space()if self.current_char.isdigit():return Token(INTEGER,self.integer())if self.current_char:self.advance()return Token(PLUS,)if self.current_char-:self.advance()return Token(MINUS,-)if self.current_char*:self.advance()return Token(MUL, *)if self.current_char/:self.advance()return Token(DIV, /)if self.current_char(:self.advance()return Token(LPAREN, ()if self.current_char):self.advance()return Token(RPAREN, ))self.error()return Token(EOF,None)class Interpreter(object):
#句法分析
#语法树def __init__(self,lexer):self.lexerlexerself.current_tokenself.lexer.get_next_token()def error(self):raise Exception(Invalid Syntax)def eat(self,token_type):if self.current_token.typetoken_type:self.current_tokenself.lexer.get_next_token()else:self.error()def factor(self):tokenself.current_tokenif token.typeINTEGER:self.eat(INTEGER)return token.valueelif token.typeLPAREN:self.eat(LPAREN)resultself.expr()self.eat(RPAREN)return resultdef term(self):resultself.factor()while self.current_token.type in (MUL,DIV):tokenself.current_tokenif token.typeMUL:self.eat(MUL)resultresult*self.factor()if token.typeDIV:self.eat(DIV)resultresultlf.factor()return resultdef expr(self):resultself.term()while self.current_token.type in (PLUS,MINUS):tokenself.current_tokenif token.typePLUS:self.eat(PLUS)resultresultself.term()if token.typeMINUS:self.eat(MINUS)resultresult-self.term()return resultdef main():while True:try:textinput(calc_ )except EOFError:Interpreter.error()breakif not text:continuelexerLexer(text)resultInterpreter(lexer).expr()if(result is not None):print(result)if __name__ __main__:main()结果 总体结构图 对应结构图 五、实验总结 对于体系结构应用的理解等。 转载于:https://www.cnblogs.com/lchui2155/p/7748135.html