6 OneSeek

尚未进行身份认证

暂无相关简介

等级
TA的排名 12w+

两周自制脚本语言 第17 天 Parser库的内部结构

两周自制脚本语言

2020-02-01 19:47:24

两周自制脚本语言 第16 天 语法分析方式

第16 天 语法分析方式

2020-02-01 19:46:53

两周自制脚本语言 第15 天 手工设计词法分析器

第15 天 手工设计词法分析器

2020-02-01 19:46:17

两周自制脚本语言 第19 天 抽象语法树与设计模式

两周自制脚本语言

2020-02-01 19:48:23

两周自制脚本语言 第18 天 GluonJ的使用方法

两周自制脚本语言

2020-02-01 19:47:49

两周自制脚本语言 第14 天 为Stone语言添加静态类型支持以优化性能

前一天我们借助Java语言设计了一种专用的虚拟机,用于执行中间代码。从内部来看,该虚拟机通过Java语言的Object类型来表示所有类型的值,整数也将由Integer对象表现。不可否认,这是程序执行速度较慢的一个重要原因今天我们将利用静态数据类型,尽可能以int类型的值来表示整数值。同时,我们将不再使用专用的虚拟机,而直接使用Java虚拟机。抽象语法树需要预先转换为Java二进制代码,不过,由于...

2020-02-01 19:45:31

两周自制脚本语言 第13天 设计中间代码解释器

在使用中间代码解释器时,我们要事先将抽象语法树转换为中间代码。简单来说,中间代码是一种虚拟的机器语言,因此,中间代码的转换方法,其实与编译器将抽象语法树转换为真正的机器语言时采用的方法大体相同中间代码与机器语言之间利用抽象语法树,语言处理器需要在节点之间往返操作,这是一件费时的工作。因此,如果语言处理器能够实现计算遍历顺序,并以此重新排列节点,执行开销就可能有所降低通常,语言处理器不会直接将...

2020-02-01 19:45:19

两周自制脚本语言 第12天 优化对象操作性能

第12天 优化对象操作性能介绍一种更常见且效率更高的类与对象实现方式。12.1 减少内存占用第9天的实现使用了环境来表现Stone语言中的对象。环境中不仅含有由字段名与相应的值组成的名值对,还记录了由方法名与Function对象组成的键值对。这种实现的内存利用率很低。像JavaScript每个对象都能拥有不同方法的语言,这种实现方式较为合适。然而,Stone语言中同一个类的对象只能具有相同...

2020-02-01 19:45:07

两周自制脚本语言-第11天 优化变量读写性能

第11天 优化变量读写性能以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式。11.1 通过简单数组来实现环境假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个元素,将y设为第1个元素,以此类推。这样一来,语言处理器引用变量时就无需计算哈希值。也就是说,这是一个通过编号,而非名称来查找变量值的环境为了实现这种设计,语言处理器需要在函数定义完成后遍历对应的抽象语法树...

2020-01-23 20:20:11

问题 1094: 字符串的输入输出处理

问题 1094: 字符串的输入输出处理时间限制: 1Sec 内存限制: 64MB 提交: 10861 解决: 3797题目描述字符串的输入输出处理。输入第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。输出先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每...

2020-01-22 22:05:41

两周自制脚本语言-第10天 无法割舍的数组

第10天 无法割舍的数组目标:为Stone语言添加简单的数组功能,下标(index)只能使用整数值。10.1扩展语法分析器代码清单10.1 与数组相关的语法规则elements : expr { "," expr }primary : ( "[" [ elements ] "]" | "(" expr ")" | NUMBER | IDENTIFIER | STRING ) { pos...

2020-01-22 20:53:06

两周自制脚本语言-第9天 设计面向对象语言

第9天 设计面向对象语言目标:为Stone语言添加类和对象的支持。仅支持单一继承9.1 设计用于操作类与对象的语法添加的类与对象的处理功能后,下面的Stone语言就能被正确执行了class Position { x = y = 0 def move(nx,ny) { x = nx; y = ny }}p = Position.newp.move...

2020-01-21 21:45:13

两周自制脚本语言-第8天 关联Java语言

第8天 关联Java语言本章要达到的目的:扩展Stone语言,使它能在程序中调用Java语言中的static方法8.1 原生函数Java语言提供了名为原生方法的功能,用于调用C语言等其他一些语言写成的函数。我们将为Stone语言添加类似的功能,让它能够调用由Java语言写成的函数。原生函数将由Arguments类的eval方法调用。代码清单8.1是用于改写Arguments类的eval方法...

2020-01-20 18:50:07

两周自制脚本语言-第7天 添加函数功能

第7天 添加函数功能基本的函数定义与调用执行、引入闭包使Stone语言可以将变量赋值为函数,或将函数作为参数传递给其他函数有些函数将有返回值的归为函数,没有返回值的归为子程序7.1 扩充语法规则函数定义语句的语法规则此书将函数定义语句称为def语句。def语句仅能用于最外层代码,用户无法在代码块中定义函数Stone语言将最后执行语句(表达式)的计算结果将作为函数的返回值返回代码清单 7...

2020-01-19 22:37:07

两周自制脚本语言-第6天 通过解释器执行程序

第6天 通过解释器执行程序解释器从抽象语法树的根节点开始遍历该树直至叶节点,并计算各节点的内容6.1 eval方法与环境对象eval方法:eval是evaluate(求值)的缩写。eval方法将计算与该节点为根的子树对应的语句、表达式及子表达式,并返回执行结果。eval方法递归调用子节点的eval方法不同类型的节点的类,对eval方法有着不同的定义eval方法的简化版本public Ob...

2020-01-18 18:58:03

字符串逆序

#include<bits/stdc++.h>using namespace std;int main(){ char str[100], d; int i, len, j; gets(str); len = strlen(str); cout << str; return 0;}

2020-01-17 21:29:21

两周自制脚本语言-第5天 设计语法分析器

第5天 设计语法分析器5.1 Stone语言的语法代码清单 5.1 Stone 语言的语法定义 primary : "(" expr ")" | NUMBER | IDENTIFIER | STRING factor : "-" primary | primary expr : factor { OP factor ...

2020-01-17 21:11:22

求n以内的素数

#include<bits/stdc++.h>using namespace std;bool fun(int n){ for(int i=n/2;i>=sqrt(n);i--){ if(n%i==0){ return false; } } return true;}int main(){ int n; cin>>n; for(int...

2020-01-16 20:43:32

蓝桥杯 问题 1004: [递归]母牛的故事

问题 1004: [递归]母牛的故事时间限制: 1Sec 内存限制: 128MB 提交: 38150 解决: 11352题目描述有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输...

2020-01-16 20:37:03

两周自制脚本语言-第4天 用于表示程序的对象

第4天 用于表示程序的对象程序分割为单词后,接下来是构造抽象语法树。4.1 抽象语法树的定义 抽象语法树(AST,Abstract Syntax Tree)是一种用于表示程序结构的树形结构。词法分析 (分割单词)-> 语法分析(构造抽象语法树)BinaryExpr对象用于表示双目运算表达式。 双目运算表达式指的是四则运算等一些通过左值和右值计算新值的运算。4.2 ...

2020-01-16 19:58:41

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。