TON(六)——fift算法,注释的改写

系列文章目录

TON(五)

TON(四)

TON(三)

TON(二)

TON(一)

前言

fift是一门十分强大的栈编程语言,,在TON中它是由c++编译而成的语言,可自身依然具有很高的拓展性。接下来为大家演示几个有趣的算法,今天先来改个注释玩玩。

一、fift注释的严格格式

在fift语言中,经常会遇到一个奇怪的现象就是使用注释// 必须要空一格才会有效果?

// 这是一个注释

使用这种方法输入的文本会正常通过编译,而如果解接下来的这种情况

//这是一个注释

就会抛出错误

└─$ toncli fift run '/home/zqy/tonlearn/v.fif'
[ 1][t 0][2024-10-14 01:08:49.172379300][Fift.cpp:66]   top: <continuation 0x2351160>
level 1: <continuation 0x2347ca0>
level 2: <text interpreter continuation>
[ 1][t 0][2024-10-14 01:08:49.172399715][fift-main.cpp:192]     Error interpreting file `/home/zqy/tonlearn/v.fif`: v.fif:1:    //这是一个注释:-?

在 Fift 语言中,注释的使用需要遵循特定的语法规则。Fift 语言的注释通常以 // 开头,后面紧跟着至少一个空格,然后是注释文本。如果 // 后面直接紧跟着注释文本而没有空格,Fift 解释器可能会将其解释为代码的一部分,从而导致编译错误。

我们来仔细思考一下,如果是C++ 支持两种类型的注释:

  1. 单行注释:使用 // 开头,后面紧跟注释文本。这与 Fift 中的单行注释类似,但通常不需要空格。

    //这是一个单行注释
    
  2. 多行注释:使用 /* 开头,以 */ 结尾。这种注释可以跨越多行。

    /*
    这是一个
    多行注释
    */
    

会发现自由的多,那么我们是否可以通过元语的拓展来将fift具备更加灵活的注释呢?

二 fift注释的底层逻辑

活动词和普通词

首先先让我们来探究一下注释的源代码:

fift标准库源代码

{ 0 word drop 0 'nop } :: //

这是标准库的第一条源代码,也就是说,fift本身是没有任何注释的方式的,必须从标准库中才可以找到相关的定义。

在 Fift 语言的世界里,有一个叫做 state 的神秘变量,它就像一个幕后英雄,控制着解释器的行为。这个 state 变量是内部的,我们这些编程的人通常触碰不到它。它的作用很简单,但影响巨大:当 state 为零时,解释器就像一个急性子,遇到任何词素都会立刻查字典并执行。但如果 state 为正数,解释器就会变得冷静,它会把找到的词素记下来,但不马上执行,而是把它们加入到一个正在构建的代码列表中。

这个 state 变量通常代表了当前打开的代码块的数量。比如,如果你写了 { 0= { .“zero”,这就像是打开了两扇门,state 就变为了二。这时,你正在构建的代码列表就放在堆栈的最上面。

当你写下 {,就像是对解释器说:“嘿,我要开始一个新的代码块了。”这时,一个新的空列表就会出现在堆栈上,state 也会增加一。而当你写下 },就像是说:“我完成这个代码块了。”如果 state 不是零,它就会减少一,并且把完成的代码块留在堆栈上。如果 state 还不是零,这个新的代码块就会被当作一个匿名的常量,编译到更大的代码块中。

在 Fift 中,还有一种特别的词素,叫做活动词素(active words)。这些词素不像普通的词素那样乖乖地听从 state 的指挥。无论 state 是什么,活动词素总是被执行。它们在堆栈上留下一些值和执行令牌,然后解释器会根据 state 的值来决定下一步怎么做。如果 state 是零,它就会忽略那些值,只执行那个执行令牌。如果 state 不是零,它就会把那些值和执行令牌编译到当前的代码列表中。

而根据上面的 ::这个代码的出现,实际上是定义了一个 Fift 活动词,active words,也就是//

word 命令

在 Fift 语言中,word 是一个强大的命令,它能够识别并捕获字符串。当 word{} 结合使用时,它能够从特定的代码块中提取字符串。这个过程涉及到对代码文本的解析和处理,非常类似于魔法师在施展咒语时,能够从周围的空气中提取出无形的元素。

  1. 识别字符串word 它从 } 后面的第一个空格之后开始识别内容,直到遇到由 word 前面的词素定义的中断点。这个中断点可以是任何字符或字符序列,它告诉 word 在哪里停止捕获字符串。

  2. 捕获为字符串:一旦 word 识别了要捕获的文本,它就会将这段文本作为一个字符串压入堆栈。这意味着这段文本现在可以被 Fift 程序作为数据进行处理,比如打印输出、存储或作为其他操作的参数。

  3. 中断点的定义word 原语前面的词素定义了捕获字符串的中断点。例如,如果使用 char * word,那么 * 就是中断点。这意味着 word 会捕获从 {} 后面的第一个空格开始,直到遇到 * 之前的所有文本。

如下面的一个例子:

{ char * word } 我的小猫咪 // 么么 * 哈哈哈

在这个例子中:

  • char * 定义了捕获字符串的中断点为 * 字符。
  • word 开始捕获从 {} 后面的第一个空格之后的所有文本,直到遇到 *
  • 我的小猫咪 // 么么 被识别为一个字符串,并压入堆栈。
  • 哈哈哈* 之后的文本,不会被包含在捕获的字符串中。

这个过程非常强大,因为它允许 Fift 程序动态地识别和处理文本,就像魔法师能够从周围的世界中提取和操纵无形的元素一样。

所以在我们的原始定义中0 word就表示不需要任何中断,也就是所有的}空格之后的内容都会被变为字符串。

丢弃与毫无意义的操作

drop 0 'nop
是word 之后的操作,它表示将栈顶部的一个元素丢弃,然后移除0 在进行无意义的操作,啥也不做。
这真的很low,啥也不做放到这里有啥用????

三 美化注释行动

丢掉垃圾

首先,我一定要把,0 'nop删除,拉黑,碍眼睛,占地放。具体的方式就是,用普通词重新写他

{ 0 word drop  } : //

我们用:定义,普通词不需要特定的后续令牌操作,那些也没必要,将更改后的注释使用一下。

{ 0 word drop  } : //
// 这是一个注释

真真真舒服,编译速度还提升了一些。

解决//不能空格的问题

其实和//贴贴也不是没有什么解决的办法,它的核心目的就是不让fift将他们识别成一个词汇。在fift中几乎一切指令的断言都是空格实现的,但它依然为我们提供了升级的方式。如(create):
它给了我们升级的机会:
操作 命令 等级 (create)
其实fift不仅仅只有上文提到的0和1两个级别,还有 2 3!
普通词素:不具有特殊行为,仅在调用时执行其定义。
活动词素:即使在编译状态下也会被执行。
前缀词素:可以修改词素的解析方式,允许在没有空格的情况下使用。
+2以上的就是前缀词汇。


 { 0 word drop  } "//" 2 (create)

//完美哈哈哈哈

这样编译就通过了,//可以和单词贴贴了,多美的解决方式

更舒服的注释

当然,我们也可以实现其他的定义/*作为注释

 { "*/" word drop  } "/*" 2 (create)

/* 真不错
   哈哈哈哈 
 */
 

当然我们可以定义更舒服(抽象)的注释,写到;;里面的注释

  { char ; word drop  } ";" 2 (create)
   ;这种注释真的很舒服,有没有人懂;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WordPress官方发布“新”插件“SCF”(安全自定义字段)

安全自定义字段 (SCF) 为您提供了处理数据所需的所有工具&#xff0c;从而将 WordPress 网站转变为成熟的内容管理系统。 使用 SCF 插件可以完全控制您的 WordPress 编辑屏幕、自定义字段数据等。 按需添加字段—SCF字段生成器允许您快速轻松地将字段添加到 WP 编辑屏幕&…

第一个servlet程序

文章目录 在原有工程上建立模块前端配置前后端映射关系添加外部依赖库后端代码启动配置 在原有工程上建立模块 添加web框架 前端 应用结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第一…

什么是SYN flood,如何处理

在数字化时代&#xff0c;随着互联网的普及和技术的飞速发展&#xff0c;网络安全问题变得日益严峻。Flood攻击&#xff0c;作为一种典型的网络攻击手段&#xff0c;对个人和企业的信息安全构成了重大威胁。通过深入了解Flood攻击的概念、特点、影响及解决方案&#xff0c;我们…

SpringSecurity源码分析以及如何解决前后端分离出现的跨域问题

解决Security前后端分离出现的跨域问题 一. Security源码分析 首先在看源码之前我们先来看这张图 , 这张图展示了Security执行的全部流程 从上图可知Security执行的入口是UsernamePasswordAuthenticationFilter这个抽象类 , 那我们就先从该类进行分析 1. UsernamePasswordAu…

【智慧大屏】BI智慧大屏,大屏可视化解决方案(word原件)

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.…

Scala入门基础(12)抽象类

抽象类&#xff0c;制定标准&#xff0c;不要求去具体实现 包含了抽象方法的类就是抽象类。抽象方法只是有方法名&#xff0c;没有具体方法体的方法 定义抽象类要用abstract&#xff08;抽象&#xff09;关键字 用智能驾驶技术举例&#xff1a;演示&#xff09…

深入理解WPF中的命令机制

Windows Presentation Foundation&#xff08;WPF&#xff09;是微软推出的一种用于构建桌面客户端应用程序的技术。它被认为是现代Windows应用程序的基础&#xff0c;具有强大的图形和媒体处理能力。在WPF中&#xff0c;“命令”是一个重要的概念&#xff0c;它为应用程序开发…

2024.10月11日--- SpringMVC拦截器

拦截器 1 回顾过滤器&#xff1a; Servlet规范中的三大接口&#xff1a;Servlet接口&#xff0c;Filter接口、Listener接口。 过滤器接口&#xff0c;是Servlet2.3版本以来&#xff0c;定义的一种小型的&#xff0c;可插拔的Web组件&#xff0c;可以用来拦截和处理Servlet容…

力扣 142.环形链表Ⅱ【详细解释】

一、题目 二、思路 三、代码 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode detectCycle(ListNode hea…

LSL常见应用场景及示例<一>

目录 往期推荐 场景1&#xff1a;如何在指定内存定义中定位一个函数&#xff1f; 场景2&#xff1a;如何在绝对内存偏移地址处定位一个函数&#xff1f; 场景3&#xff1a;如何在绝对地址处定位一个函数&#xff1f; 场景4&#xff1a;有多个函数必须位于特定的内存定义中。…

vue3+ts+vite--路由跳转,params传参好像丢失了?

前言 相信大家一定写过后台管理系统&#xff0c;有一个很普遍的功能&#xff0c;就是点击编辑&#xff0c;根据id&#xff0c;跳转到相对应的编辑页面&#xff0c;id是通过路由params传递过去了&#xff0c;但是还有一个需求是要将父组件的名称也传递过去 &#xff0c;过程特别…

从0到1封装一个image/pdf预览组件

iShot_2024-10-14_16.47.10 目录结构 content.vue <template><div class"no-content-block"><i class"iconfont icondocument large-file" /><div class"text-wrapper">{{ t(__ui__.siPreview.previewSupported) }}<…

Spring Cloud Sentinel配置

Spring Cloud Sentinel 文章目录 Spring Cloud Sentinel1. Sentinel Dashboard 启动2. Spring Cloud 客户端配置3. Sentinel Dashboard 限流配置流控模式直连关联链路 流控规则快速失败Warm Up排队等待 4. Sentinel Dashboard 熔断配置5. Sentinel Dashboard 热点配置 1. Senti…

MEMC功能详解

文章目录 MEMC的工作原理&#xff1a;优点&#xff1a;缺点&#xff1a;适用场景&#xff1a;1. Deblur&#xff08;去模糊&#xff09;2. Dejudder&#xff08;去抖动&#xff09;总结两者区别&#xff1a; MEMC&#xff08;Motion Estimation and Motion Compensation&#x…

打破“几何第五公设不可证明”的神话——黄氏平行定义使证明第五公设易如反掌

黄小宁 绿色图片中的直线平行的定义&#xff08;此定义可推广为相应的平面平行的定义&#xff09;使人能根据几何常识一下子证明第五公设从而表明“2000年都无人能解决的世界著名数学难题”其实是一个天大的笑话。

Linux 手撕线程池

前言 线程池 是 池化技术 中很典型的一个&#xff0c;它旨在高效的管理和复用线程资源&#xff01;在现在的计算机体系中&#xff0c;线程是执行任务&#xff08;调度&#xff09;的基本单位。然而&#xff0c;频繁的创建和销毁线程也会带来较大的开销&#xff0c;包括系统资源…

RISC-V笔记——Pipeline依赖

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Pipeline Dependencies(Pipeline依赖)。 2. Pipeline依赖 Pipeline依赖指的是&a…

ECCV‘24 | WTConv:小参数大感受野,基于小波变换的新型卷积

前言 近年来&#xff0c;人们尝试增加卷积神经网络&#xff08;CNN&#xff09;的卷积核大小&#xff0c;以模拟视觉Transformer&#xff08;ViTs&#xff09;自注意力模块的全局感受野。然而&#xff0c;这种方法很快就遇到了上限&#xff0c;并在实现全局感受野之前就达到了饱…

鸿蒙原生应用扬帆起航

就在2024年6月21日华为在开发者大会上发布了全新操作的系统HarmonyOS Next开发测试版&#xff0c;网友们把它称之为“称之为纯血鸿蒙”。因为在此之前鸿蒙系统底层式有两套基础架构的&#xff0c;一套是是Android的AOSP&#xff0c;一套是鸿蒙的Open Harmony&#xff0c;因为早…

一篇文章教你完成软件验收测试,项目结题不再难

在软件开发过程中&#xff0c;验收测试是项目结题前的最后一道关卡。能否顺利通过验收测试&#xff0c;直接关系到项目的成功与否。 了解软件验收测试的重要性 软件验收测试是项目开发周期中的关键环节&#xff0c;其主要目的是检验软件是否满足用户需求、设计规范和合同要求…