很高兴今天能发布这个声明:
经过不懈努力,Lysee于今晨8:30释出1.1.0.5511版本,新版本初步实现了语法定义,帮助Lysee又向前“
挪了”一步!
首先向Scheme/Lisp、Haskell、Perl、Python还有其它语言表示一下尊敬:
syntax void thanks(%(you) AND %(he))
{
= "thanks!", you, "and", he;
}
thanks "scheme/lisp" AND "haskell, python, perl and others";
“
syntax”是为Lysee新定义的关键字,用于向语法分析器提示有必要在后续的代码中检测并使用新定义的语法。
用“
syntax”定义的语法只是一个再普通不过的函数,下面是前面定义的“thanks”语法的伪代码:
public variant main(variant ARGS)
{
PUSH_FUNC main::thanks //==> 将函数thanks压栈
PUSH_STR scheme/lisp
PUSH_STR "haskell, python, perl and others"
CALL [3]
POP
RETURN
}
syntax void thanks(%(you) AND %(he)) //==> public void thanks(variant you he)
{
PUSH_STR thanks!
PUSH_VARB you
PUSH_STR and
PUSH_VARB he
PRINT [4]
}
原理:
编译器将函数定义中
%(ID)和
%{ID}格式中的标识符登记为
variant类型的参数,其它符号作为占位符被抛掉。
%(ID) - 表示直接计算
%(ID)所在位置的表达式,仅将结果传递给新函数。
%{ID} - 表示在编译时将
%{ID}对应位置上的表达式转换为闭包。
下面定义一个略微复杂的语法,实现
Pascal中的
repeat ... until循环:
// 定义 repeat .. until 语法
syntax void repeat(%(STATEMENT) until %{FALSE})
{
do { STATEMENT() } while (not FALSE());
}
// 使用
int guess, magic = 5;
repeat {
guess = sys::random(10);
= guess, eol;
} until (guess == magic);
// 输出
7
0
3
4
2
5
看到这儿,研究FP的朋友们应该可以会心的笑了,看看下面的伪代码就更清楚了
public variant main(variant ARGS)
{
VARB guess: int
VARB magic: int
PUSH_INT 5
SAVE_TO magic
POP
PUSH_FUNC main::repeat //==> repeat ... until
PUSH_SUBF main::main.1 //==> STATEMENT
PUSH_SUBF main::main.2 //==> FALSE
CALL [3]
POP
RETURN
}
public variant main.1() //==> STATEMENT
{
PUSH_FUNC sys::random
PUSH_INT 10
CALL [2]
SAVE_TO guess
POP
PUSH_VARB guess
PUSH EOL
PRINT [2]
RETURN
}
public variant main.2() //==> FALSE
{
PUSH_VARB guess
PUSH_VARB magic
CALC ==
RETURN [1]
}
syntax void repeat(%(STATEMENT) until %{FALSE})
{
0000:PUSH_VARB STATEMENT //==> main.1
CALL [1]
POP
PUSH_VARB FALSE //==> main.2
CALL [1]
CALC NOT
JMPT 0000: POP
}
再举一个常见的
for_each语法定义,真是很简单:
syntax void for_each(%(LIST): %(PROC)) // 要求LIST必须支持each操作
{
LIST.each(PROC);
}
// 调用
for_each strlist("hello\nworld\n!"): {|string item| = item, eol};
// 输出
hello
world
!
语法定义扎根在函数闭包上,怎么优化函数闭包的生成、使用和释放,如何节省系统资源仍然还是个大问题。
总结一下:语法定义是个好东西,但使用的代价可能不菲,特别是过分滥用时会破坏我们已有的代码。
- setup.rar (1.6 MB)
- 描述: Lysee 1.1.0.5513精简版安装程序
- 下载次数: 2
分享到:
相关推荐
学习这个例子可以帮助初学者了解如何在Lysee中定义变量、函数、类以及控制结构。 3. **开源代码分析**:例子提供的开源代码是学习的好资源。通过阅读和理解代码,你可以看到如何在Delphi中创建和调用Lysee脚本,...
lysee是一种支持面向对象编程(语法类似c/c++和java)的轻量级脚本引擎,能够非常简便的嵌入到使用delphi开发的程序中并控制程序的运行。 lysee的内核是用delphi6.0开发的,以动态连接库的形式对外发布,配套的接口...
TCodeEdit是本人为Lysee编写的语法加亮代码编辑器,使用纯Pascal开发,当前版本支持Pascal、Lysee、C/C++和Java的代码编写,项目代码托管在GitHub(https://github.com/lysee/TCodeEdit.git)。TCodeEdit在Lazarus中...
在IT行业中,为应用程序添加脚本支持是一种常见的增强软件功能和灵活性的方式。Delphi作为一款强大的Windows应用程序开发工具,提供了丰富的功能和库,使得开发者能够为自己的应用集成脚本引擎,使得用户或开发者...
2023-04-06-项目笔记-第二百六十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.259局变量的作用域_259- 2024-09-19
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
本文阐述了人工智能在数据中心节能应用领域的理论与实践,通过介绍机器学习和基于物理机理模型的人工智能节能技术的应用情况,展示了如何利用AI技术来提升数据中心能源效率,减少PUE。并指出基于大数据分析的智能运维方法能优化数据中心冷却系统的运行状态,从而达成绿色节能目的;同时也强调了未来的节能系统发展趋势及标准化推进措施等重要方向。 适用人群:数据中心管理人员,环保工作者,信息和通信技术行业的专业人士。 使用场景及目标:适用于那些希望利用AI和其他技术优化其数据中心效能的企业;通过技术手段达到减少能耗、提升工作效率的目的。 其他:随着全球对环境友好技术的关注增加,在数据中心的建设和运维过程中融合AI等新技术已经成为必然趋势。
基于java的网上球鞋竞拍系统设计与实现.docx
【c语言入门】 静态库、动态链接库、include、makefile、io、文件操作函数、管道原理及应用、简单的数据结构
基于java中药分类管理系统设计与实现.docx
内容概要:文中针对大斜视SAR系统在动目标成像上遇到的各种问题,包括聚焦难、几何变形和交叉副瓣高等挑战,采用了一个融合了频谱旋转和稀疏化增强处理方式的新颖算法——频谱旋转ωk算法,进行了详细讨论并提供了一套完整解决方案。 适用人群:该研究对于SAR技术研究专家、学者、工程师有着特别的实际意义与价值。 使用场景及目标:本成果可应用于斜视角达到甚至超过七十度的高斜度SAR动目标成像系统中,提升动目标检测、定位、识别等能力。具体应用场景涵盖了战场态势监测、交通流量监管等多个领域。 本文通过详细的理论建模及仿真实验结果论证算法的有效可行性;此外,文中提及了未来在更高动态环境下SAR成像领域的扩展可能性。
基于java的新闻发布系统设计与实现.docx
基于java的应急资源管理系统设计与实现.docx
基于java的斗车交易系统设计与实现.docx
主要内容:文章探讨了随着6G通讯技术发展,将通感一体化应用于车联网的可能性及其带来的显著效果,尤其是在辅助自动驾驶、多车合作感知与控制、车路通感融合发展中的应用。通过阐述各方面的技术框架和细节(如波束管理和智能反射面技术),文中指出了车联网系统在实现高效率、安全性以及智能化管理上的关键突破。同时强调在实施中遇到诸如频带分配、信号混迭、硬件整合等现实挑战,并提出了未来发展方向。 适用人群:研究人员和开发人员,特别是从事车联网和新一代通讯技术支持的专业人士。 使用场景及目标:适用于车联网的研究和开发,目的是构建高效的交通通信系统,在实际使用中促进自动驾驶、智能交通管理系统等新技术落地,提高道路通行的安全性和效率。 相关背景与建议:本文对通感一体化的技术介绍深入浅出,并讨论了一系列技术前沿,包括智能反射技术的最新成果。阅读者应掌握一定的无线通讯基础知识,并能理解技术理论在工程实践里的潜在机遇与难题。
均包含代码,文章,部分项目包含ppt
均包含代码,文章,部分项目包含ppt
2019李宁跑步自媒体年度内容运营方案.pptx
基于java的中国咖啡文化宣传网站的设计与实现.docx
基于java的学生考勤管理设计与实现.docx