`
lanxiazhi
  • 浏览: 3158 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简单的脚本解释器

阅读更多

       最近做了一个简单的脚本解释器。现在简单总结一下。

       先实现了一个简单的计算器,可以处理任意复杂的表达式,如1+2>3 && (10%2+1)<=9,支持基本的算术运算符,+-*/%,比较运算符> >= < <= == !=,逻辑运算符 && || !。实现方法相对简单,网上有很多计算器的实现。

       然后开始考虑变量,以及包含变量的表达式的处理,如a+b,如果之前对a赋值10b赋值20,表达式的值就是30。这个好实现,用一个哈希表保存变量名和值的对应关系,表达式求值时,碰到变量就从哈希表中取出值进行运算。这个哈希表我称之为堆。

       写到这,就实现了一个简单的、带变量的计算器。比如,可以处理类似下面的语句:

a=100;

b=200;

c=a+b;//可以是任意复杂的表达式。

       把这个计算器放到命令提示符下运行,是很方便的,因为可以保存计算的中间变量。

       然后需要实现IF分支语句。这就需要用到栈,保存当前解释器的状态。

IF a>100 THEN

  a=200

END

       首先需要计算表达式a>100的值,如果为true的话,栈记下当前解释器的状态为IF,表示在IF语句块中。继续执行下一句,a=200,完成变量赋值,a在堆中的值变成了200。碰到END语句,就说明IF语句结束了,从栈中弹出IF。注意,栈应该可以处理IF语句的嵌套。

       脚本解释器还应该能处理方法的定义和方法的调用。方法就是一个语句的集合,方法的实参其实就是堆中的变量。执行方法时,可以想象,初始化一个新的栈,和一个堆,这个堆中包含了实际参数。然后就开始执行方法中的语句了,跟不在方法中的语句一样执行。

       表达式中加入了方法之后,表达式的求值变得复杂了一点。但是,方法调用其实也是一种运算符,只不过优先级高一些罢了,而且需要处理方法的参数。这都不是什么难题,毕竟网上已经有很多实现了。

 

0
0
分享到:
评论

相关推荐

    脚本解释器框架.rar

    本资源“脚本解释器框架.rar”提供了一个基于C++的简单脚本语言解释器框架,它涵盖了基本的变量定义、标准函数、关键字以及运算符等功能,为初学者或开发者提供了学习和扩展的基础。 C++是这个项目的主要编程语言,...

    delphi编写的小型解释器

    在IT领域,编程语言的解释器是至关重要的工具,它能读取并执行特定语言编写的脚本。本文将深入探讨使用Delphi编程环境构建小型解释器的过程,以及相关的关键技术点。 首先,我们要理解“解释器模式”。这是一种设计...

    基于C#实现的一个简单的C#脚本解释器,可以将完整的C#脚本代码运行在控制台

    《基于C#实现的简单C#脚本解释器解析》 C#是一种高效、类型安全且面向对象的编程语言,广泛应用于Windows桌面应用、游戏开发、Web应用等多个领域。为了进一步提升开发效率和灵活性,开发者有时需要在运行时动态执行...

    超简单as脚本解释器代码.rar

    大概13年上半年做页游时候,ActionScript3不方便弄脚本,突发奇想自己写个脚本来跑,按照简单的C语言语法,看了下编译原理,手写递归下降,实现了一个很简单的解释器,懒了运行时没做栈执行,后来由于各种原因,也没用上,前几...

    sina.rar_K._脚本解释器

    【标题】"sina.rar_K._脚本解释器"指的是一个与新浪相关的压缩包文件,其中包含了一个轻量级的脚本解释器。这个解释器可能是为了帮助用户在线编辑和处理脚本代码而设计的。"K."可能代表了这个解释器的特定版本或者...

    几百行代码实现一个脚本解释器.doc

    本文档将探讨如何利用几百行代码构建一个简单的脚本解释器,涵盖词法分析、语法分析以及基本的语义分析,从而实现一个功能相对完整的“语言”。作者通过这个项目实践,旨在深化对编译原理的理解,并逐步完善这个脚本...

    Interprete:简单的脚本解释器

    脚本解释器 学校项目 该程序是作为动态结构的学校项目而制作的,因此它根本不复杂,但它介绍了创建解释器的基础。 ======== 该程序是作为动态结构的学校项目而制作的,因此它根本不复杂,但它介绍了创建解释器的...

    纯中文脚本解释器 v5.12.26.6410

    类似于BASIC、PHP等的脚本解释程序,但是采用完全中文习惯语法,比如echo echo a;、/*/*b*/*/。可以形如a=b=c=1般赋值,自定义复合关键字摆脱语法限制,具有指针的指针功能(多重),标号最近原则,静态语法分析(HTML)...

    使用 Go 语言实现的简单的 Lua 解释器。.zip

    在本文中,我们将深入探讨如何使用 Go 语言实现一个简单的 Lua 解释器。Go 语言以其高效的性能、简洁的语法和强大的并发支持而备受推崇,而 Lua 则是一种轻量级的脚本语言,常用于游戏开发和其他嵌入式系统。结合...

    shell命令解释器

    1. **shell1.c**:这个文件很可能是实现一个简单命令解释器的源代码,可能包含命令解析、执行等功能。学习这个文件可以深入理解命令解释器的工作原理。 2. **www.pudn.com.txt**:这个文件可能是从网站pudn.com下载...

    VB 实现简单脚本语言编译器及执行器

    脚本解释器则是读取并逐行执行脚本的组件。它不需要像编译器那样将整个脚本转化为机器码,而是直接执行源代码的每个语句。在VB中实现解释器,我们可以设计一个循环结构,逐行读取脚本,然后根据语法规则执行相应的...

    简单的shell解释器

    操作系统课的作业。实现了顺序执行命令,管道和重定向的嵌套,还有简单的history功能

    HWS脚本解释器(HwsScript_v2.31)

    HWS脚本解释器(HwsScript_v2.31) 经常制作.chm文件存在这样一个烦恼,也就是必须的把那些要用的.htm文件通过鼠标一个又一个的与显示的名称相关联起来,十来个的好说,好几百的......,那工作量可真是不敢想象。 ...

    一个小巧的lua解释器实现

    Lua的语法简洁明了,这使得解释器的实现相对简单。例如,表达式解析通常涉及操作符优先级和结合性,以及处理括号以正确解析嵌套表达式。在`Console1.cpp`中,我们可以看到如何处理这些情况的代码。 接下来,解释器...

    迷你RGSS解释器(ruby解释器)

    3. **运行解释器**:启动迷你RGSS解释器,指定你刚刚保存的脚本文件作为输入。 4. **执行和调试**:解释器将逐行执行脚本,你可以观察游戏界面的变化来验证代码是否按预期工作。如果出现问题,可以通过修改脚本并...

    运行于JavaScript环境下的TypeScript脚本解释器,微信小游戏代码热更新技术

    运行于JavaScript环境下的TypeScript脚本解释器,微信小游戏代码热更新技术。可以直接在JavaScript的运行环境中运行TypeScript代码;性能问题:一般游戏性能不会有问题。如果需要有高性能的需求,请把高性能的代码做...

    程序设计实践-大作业-客服脚本语言解释器1

    《程序设计实践》大作业的主题是设计和实现一种领域特定脚本语言的解释器,旨在锻炼学生的编程能力和对计算机语言的理解。在这个项目中,学生卓睿将专注于计算机科学与技术的专业知识,特别是在编译原理和解释器构建...

    BF解释器,开源(欢迎下载)

    - "使用方法.doc" 文件应该包含了如何使用这个BF解释器的详细步骤和指导,可能涵盖了如何运行程序、加载BF脚本、以及如何利用其特性等信息。 - "BF语法(含扩展).txt" 提供了BF语言的基础语法和可能的扩展。BF的...

    使用 Python 解释器

    - Python 解释器具备简单的行编辑功能,包括命令行编辑和历史记录功能。 #### 二、Python 解释器的运行模式 ##### 2.1 运行模式 - **交互模式**:当从终端设备(tty)调用时,解释器以交互方式执行命令。 - **脚本...

Global site tag (gtag.js) - Google Analytics