打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
!!C语言解释器 目录 共23
运行的机器配置:以上篇的递归调用为例,运行之,屏蔽掉Log,在Debug模式下的速度性能大致为432.8秒,约7分钟。================================ Program Begin ================================The thread 'vshost.RunParkingWindow' (0x1764...
2013-04-03 14:38 阅读(982) 评论(0)
如果运行以下包含于多次递归调用的测试C代码:...void fork2(int a, int b){ if ((a + b) % 1024 == 0) print("iterate fork2: a=%i, b=%i\n", a, b); if (a + b == 2) return; else fork2(--a, --b);}...void main()...
2013-04-03 12:52 阅读(1602) 评论(0)
偶有闲暇,添加了对结构的支持。也增加了对typedef structname synonym的支持。技巧:1. 结构成员在解析时转换成相对结构于的起始地址之偏移。2. 在运行时计算成员的实际地址(运行时变量才会分配地址 )。3. 成员按ValueOfPointerIndiction方式访问。 示例代码:struct StructA { int a; int b;...
2013-04-02 05:31 阅读(912) 评论(0)
现在,来看看成果。以如下C代码为运行样本:int global_a = 1 + 2;int global_b = 1 - 2;int global_c = 1 * 2;int global_d = 1 / 2;int global_e = 1 % 2;int global_f = 1 & 2;int global_g = 1 | 2;int global_h = 1 ^ 2;...
2013-03-29 12:04 阅读(1190) 评论(2)
以+操作符为例,说明操作符分析的过程:private bool ParseExpression_Plus(Context ctx, SourceCode src, ref Expression.ExpressionNode expTree) { if (src.TestNextChar('=')) // += {...
2013-03-29 11:03 阅读(1152) 评论(0)
表达式解析中比较重要的是表达式树中操作符的插入,需要比较优先级:private bool AddOperatorNode(ref Expression.ExpressionNode expTree, Expression.Operator.Operator op) { Expression.ExpressionNode node = new Expr...
2013-03-29 10:30 阅读(922) 评论(0)
for循环的解析:private bool ParseControl_For(Context ctx, SourceCode src, Context.LocationInfo loc) { src.SkipSpace(); if (src.CurrentChar != '(') if...
2013-03-29 10:25 阅读(1877) 评论(0)
Parser类用于对C代码进行语法分析并构造语法树。/// /// Parser class parses the simple C source code to build /// the syntax serial. /// public class Parser { public enum ParsingErrorT...
2013-03-29 07:48 阅读(1282) 评论(0)
在了解词法分析之前,先看看对单词的定义:/// /// A structure for the result of word parsing. /// public class Word { public int AbsoluteLine; public int AbsoluteStartPos;...
2013-03-29 07:19 阅读(1011) 评论(0)
函数的实现如下:public class FunctionDefine : Context { private Stack> m_parameterStack; public DataTypeInfo ReturnType; public Expression.Operand.Operand ReturnValue;...
2013-03-29 05:41 阅读(887) 评论(0)

C语言解释器-13 表达式

表达式,最简单也最困难。各种算术、逻辑、赋值埋同函数调用,想想都头大如斗转星移山填海枯石烂。废话有云,根据Yacc规则,表达式由操作数及操作符构成。操作数有立即数、变量、函数调用及另一个表达式。操作符有一元、二元及三元操作符。惜乎SharpC不支持三元表达式。有两类特殊的操作数:指针及指针指示(Pointer indiction应该怎么翻译)。有一个特殊的操作符:sizeof。说其特殊...
2013-03-29 03:57 阅读(831) 评论(0)
这三种控制结构都必须结合上下文环境共同作用。看起来它们更像是一种标记。因此上,它们的实现也相当简单:public class Break : ControlFlow { public override void Print(int tabs = 0) { Debug.WriteLine(new string('\t', t...
2013-03-28 17:21 阅读(902) 评论(0)
鲜有解释器(或编译器)实现了switch控制。无它,唯复杂尔。SharpC将switch划分为两个部分实现:switch(表达式)和case。先看Case的实现,由条件值和执行部分组成:public class Case : ControlFlow { public Expression.Operand.Value Value; public...
2013-03-28 17:12 阅读(1265) 评论(0)
循环具有类似的结构:条件判断,循环体。其基类如下所示: public class Loop : ControlFlow { public Expression.ExpressionNode Condition; public virtual Block Body { get { return Ch...
2013-03-28 16:59 阅读(1085) 评论(0)
勿庸质疑,说到控制结构,首先会想到if。其实现应如下所示:public class IfThen : ControlFlow { public Expression.ExpressionNode Condition; public Block ThenClause { get { return Chi...
2013-03-28 16:47 阅读(1068) 评论(0)
出于对指针操作的支持,变量Variable需要模拟其在内存空间中的表现。每个变量都有个Address属性。参考Variable.Assign()方法,可知端倪:public virtual void Assign(Expression.Operand.Value value) { if (this.TypeInfo.IsPointer)...
2013-03-28 16:40 阅读(887) 评论(0)
Context是构建语法树的基础,程序由一个个Context组成,比如变量(申明),语句,块,函数,控制结构等。看看Context类的Run方法,很能说明问题:public virtual void Run(Context ctx) { // 正在运行标记 IsRunning = true;...
2013-03-28 16:15 阅读(1661) 评论(0)
下面是测试程序的代码,该程序用于测试语法分析和运行。代码应该可以说明其功用了。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Diagnostics;namespace...
2013-03-28 15:48 阅读(991) 评论(0)
根据分析,有以下类型:void,char,short,int,float,指针。关联到表达式的操作数,就有:Operand:操作数基类。Value:值类型。ValueOfPointer:指针类型。ValueOfPointerIndiction:指针内容类型。ValueOfVariableReference:变量引用类型。ValueOfFuncti...
2013-03-28 14:28 阅读(1144) 评论(0)
根据yacc脚本,可以看出,一个典型的C程序具有如下结构:1.变量申明(包括其初始化)初始化语句为:表达式。2. 函数(前向申明和函数体定义)函数由定义和函数体组成。2.1 定义定义的参数部分包含了参数定义,其为局部变量。前向申明仅有定义。2.2 函数体函数体为代码块。2.3 代码块代码块由语句和嵌套的代码块组成。2.4 语句语句由变量申明、以;结尾...
2013-03-28 09:49 阅读(1313) 评论(0)

C语言解释器-3 设计概览

先看看依赖图: 整个系统这样设计:SharpC:是对整个实现的包装。Memory:是对内存系统的模拟。Grammar:包含分析器和解释器。解释器包括表达式,函数,类型系统。 程序的执行逻辑主要由表达式和控制结构实现。 ShaprC的类型系统如下图,类的名字很好的解释了这个系统: 控制结构的类图如下: 再看函数: 下面是...
2013-03-27 15:03 阅读(954) 评论(0)

虽然没有使用标题里的两个著名工具,但我们还是可以参考一下。在制作过程中,为了了解两个工具,偶制作了yacc和lex的脚本,并安装了Bison和Flex。 先看yacc的脚本:利用该脚本生成的语法分析程序会将指定的源代码文件读取分析后打印,偶用它来测试自己编写的语法规则。%{#include #include extern FILE *yyin;ext...
2013-03-27 14:32 阅读(2552) 评论(0)
在维护新建对象的时候,利用对象休眠的闲暇,写了个习作。咸盐少许。通常,编译原理或编译技术都会建议使用yacc或lex来实现语言、公式的解释器或编译器。鉴于实现一个语言编译器或解释器的困难,大多数猿类都会使用这类工具。不过,本文穿越到了工具出现以前的时代,同时又开启了金手指:带了c#、Flex和Bison。既是习作,故使用c#手工打造了一个简单的c语言解释器,而并未使用Flex和Bison。...
2013-03-27 14:13 阅读(1744) 评论(0)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ST语言入门基础
JavaScript教程--从入门到精通 1
SCL语言基本语法规则:表达式
高级编程语言的发展历程
与Scheme共舞
Python小课堂开课了!-第一课
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服