当前位置: 首页 > news >正文

公共命名空间的例子3

有这样一个句子

用x语言解释[1+2*3]。
在x语言中,不符合“先乘除后加减”,这个句子应该怎样解释呢?
第一步,进行词法分析,目的是识别出注释和字符串,其中可能包括任意符号,干扰编译过程。
第二步,用句号、分号分割,并用数数的方法处理括号,识别出单个语句。这种分析方法是先用优先级低的符号进行分割,再分别处理每个段落。
以1+2×3为例,原本的做法是先算乘除,新的方法是:先用加号分割,再处理1和2×3,最后构建起一棵语法树。
现有的语言中也有类似情况,如正则表达式。
用正则表达式[...]处理字符串[...]。
正则表达式被当成一个字符串,在运行时编译并执行。
新编译原理的目标是,在编译阶段就处理好这些事情。这需要修改编译器,并采用新的编译技术。如果难以实现,就继续沿用正则表达式的方案,推迟到运行时再编译。
如果是这样,上述句子应该写成:
用x语言解释["1+2*3"]。
加上一对双引号,按字符串处理。
追求极致的程序员希望去掉这对双引号。

字符串

不管怎么说,语言中需要有字符串。在公共命名空间的理论中只有句子符合这一要求。所以说,“字符串”是一个句子,在公共命名空间中占据单独的一行。不同语言对于字符串的不同定义,在这一行的不同列。
本文仅仅是举个例子,没有强制要求语言应该是什么样子,抛砖引玉。
最基本的字符串,是C语言中的样子,双引号字符串。
"hello world\n"
扩展后的字符串,主要参考了Python语言。包括单引号字符串、三个双引号的、三个单引号的。
'He said:"hello".'
在字符串内部出现双引号,可以采用单引号标识字符串的首尾,这样可以避免使用反斜线转义。
"He said:\"hello\"."
三个双引号、三个单引号的字符串可以跨越多行。
在Python中还有raw-string和format-string,其中raw-string用于正则表达式就很方便,否则,要写下连续四个反斜线来表示一个反斜线。
r"\d{4,7}"
如果没有raw-string,要写成:
"\\\\d{4,7}"
这是因为连续两个反斜线表示一个反斜线,在C语言或Java语言解析字符串时,四个就变成了两个,再交给正则表达式引擎去解释,两个才变成一个。这很麻烦,有了raw-string就方便多了。

关于format-string,它的形式为f"hello {name}",其中name是一个变量。在Perl语言中的写法是"hello $name"或"hello ${name}",这叫做字符串内插。

程序员可以在公共命名空间中说出自己的想法,然后语言的制作者参考这些想法,落实到语言中。例如,关于字符串内插,就有以下变化。
"hello \=name"或"hello \(=name)"或"hello \name"
第一个是第二个的简写形式,省略了小括号。
第三个是最简形式,还省略了等于号。
当反斜线后边可以正确解析出一个单词时,可以省略小括号;当这个单词可以和\n, \t相区分时,可以省略等于号。设计小括号和等于号是因为有如下字符串:
"hello \namegood"
"the value of n is \n"
这一设计使得转义字符尽可能少,只剩下一个反斜线了。Python语言中,format-string中使用大括号还要求特殊写法。

>>> a=2.5
>>> b=f"a={a}"
>>> b
'a=2.5'
>>> c=f"a={{a}}"
>>> c
'a={a}'
>>>

连续两个左大括号表示一个左大括号。
字符串中尽可能少地定义转义符,是这一设计的核心。

中括号

例子[ \] ]或[ \[ ]
例子[ [ ] ]
在中括号里使用不配对的中括号,加反斜线。或者是,在中括号里使用配对的中括号,构成嵌套的括号。

相关文章:

公共命名空间的例子3

有这样一个句子 用x语言解释[12*3]。 在x语言中,不符合“先乘除后加减”,这个句子应该怎样解释呢? 第一步,进行词法分析,目的是识别出注释和字符串,其中可能包括任意符号,干扰编译过程。 第二步…...

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等) 文章目录 1、分布式存储架构(软件定义存储SDS,超融合基础架构HCI)2、存储类型(块存储,…...

第31课 Scratch入门篇:小画家(舞台上画画)

小画家(舞台上画画) 故事背景: 在舞台上选择画笔和颜色,进行画画 程序原理: 这节课我们继续练习画笔功能,通过画笔功能我们设计一个小画板,碰到哪种颜色画笔就切换成哪种颜色。 开始编程 1、绘制一大一小的黑色圆形,小的命名为画笔,大的圆形命名为black(黑色) 2、鼠…...

QT UI界面之ListView

文章目录 概述源码怎么用代码qt design 小结 概述 本来把布局文件那块写了一遍,但是看看都跟之前那篇差不多,就换了一个稍微有点难度的,也很常用的listview来写了。来看看,有什么好玩的。 源码 先看下源码,如下&…...

freeRTOS互斥量(mutex)

目录 前言 一、互斥量概述 二、互斥量函数 1.创建 2.其他函数 三、优先级反转示例 1.概念 2.代码示例 四、优先级继承 1.概念 2.代码示例 五、递归锁 1.死锁的概念 2.自我死锁 3.函数 4.递归锁代码示例 前言 在之前的信号量中,我们想要实现互斥的…...

基于GeoTools使用JavaFx进行矢量数据可视化实战

目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知,JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然&#xff0…...

zabbix的setup无法进入第二步

注意-部署时,报错要看的日志不止一个,php日志的报错也要看的,nginx接收到请求后是转发到php-fpm的 [rootweb01-84-41 ~]# chmod -R 777 /var/lib/php/session chmod: 无法访问"/var/lib/php/session": 没有那个文件或目录 [rootweb…...

代码随想录算法训练营第四十六天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

一、115. 不同的子序列 题目链接:115. 不同的子序列 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com)——115. 不同的子序列 视频讲解:动态规划之子序列,为了编辑距离做铺垫 | LeetCode&#x…...

宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装”

宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装” 问题描述解决方案 问题描述 在宝塔中安装lnmp环境时,安装nginx失败报错:检测到系统组件wget不存在,无法继续安装 如下图所示 通过检查发现系统是已经安装了wge…...

C++之运算符重载系列深入学习:从入门到精通!

为什么需要对运算符进行重载 C预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其…...

国赛分析。。。。

山东 6散落2两元素 浙江 8散落两元素 安徽不公布 4散落2元素 120s 华南 8散落两元素 西部 8散落两元素 华北 8 2.。。。 华东 东北 路边6张两元素...

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案 1.Dify 简介 1.1 功能情况 Dify,一款引领未来的开源大语言模型(LLM)应用开发平台,革新性地融合了后端即服务(Backend as a Service,BaaS)与LLMOps的精髓,为开发者铺…...

PLSQL导入导出ORACLE数据提示失败问题修改PLSQL配置

oracle中plsql导入提示无法导入问题 1.首先看下是否环境变量已经配置(具体配置看下面环境变量配置) 2.plsql数据导入中tools-->Preferences中配置如下框中的内容 3.设置 tnsnames.ora文件中看下是否设置有问题 4.PLSQL乱码问题 NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16…...

从Shift+F6到雪花算法:IDEA开发中的那些坑与解法

在日常开发中,提升代码质量和开发效率是每个开发者追求的目标。作为 Java 开发者常用的集成开发环境,IntelliJ IDEA 提供了丰富的功能与快捷键,帮助我们更快速、更高效地完成日常工作。然而,即便是如此强大的工具,也会…...

Linux知识点总结

学习目标 常见的快捷键 Linux 是一个开源的类 Unix 操作系统,广泛应用于服务器、桌面和嵌入式系统。以下是一些重要的 Linux 知识点总结: 基础概念 文件系统:Linux 使用层次化的文件系统结构,根目录为 /,其他目录如 …...

Gradio 快速开发网页应用

Gradio 是一个开源的 Python 框架,可以快速开发页面,Gradio 主要用于 AI 模型 Demo 的开发,通过几行代码可以快速生成一个 Web Demo,由于 AI 算法工程师使用的都是 Python 语言,使用 Python 开发 Demo 会相对简单&…...

spring使用validation参数及全局异常检测

1.validation参数验证工具 1.1.validation-api技术链 validation-api是一个Java的数据校验规范,它定义了一套用于校验Java Bean的API。它是JSR 303规范的一部分,也被称为Bean Validation。validation-api提供了一系列的注解,用于在Java类的…...

学习笔记 韩顺平 零基础30天学会Java(2024.8.8)

P492 第三代日期使用 P493 第三代日期方法 P495 String翻转 作业代码见chapter12homework 对于需要异常处理的情况,可以通过这种想法得到: P495 注册处理题 P496 字符串统计 P497 String内存布局测试题 P498 常见类阶段梳理 P499 集合介绍 集合的使用并不…...

45.跳跃游戏

:双层for。复杂度n*n n class Solution {public int jump(int[] nums) {// 找到所有的条约方法,返回其中的最小次数// 从后向前,依次记录到最后的次数int n nums.length;if(n 1) return 0;// int[] temp new int[n];// temp[n-1] 0;fo…...

Golang | Leetcode Golang题解之第328题奇偶链表

题目: 题解: func oddEvenList(head *ListNode) *ListNode {if head nil {return head}evenHead : head.Nextodd : headeven : evenHeadfor even ! nil && even.Next ! nil {odd.Next even.Nextodd odd.Nexteven.Next odd.Nexteven even.N…...

【ARM】CMSIS 软件标准接口

目录 CMSIS:Cortex Microcontroller Software Interface Standard1. 概述2. CMSIS-Core2.1 概述2.2 关键组件2.3 示例代码2.4 详细解释 3. CMSIS-DSP3.1 概述3.2 关键组件3.3 示例代码3.4 详细解释 4. CMSIS-RTOS4.1 概述4.2 关键组件4.3 示例代码4.4 详细解释 5. C…...

Qt 小功能:加载等待动画——转圈圈

加载等待动画实现——转圈圈 效果图:(看封面最好) 关键要点 流畅的动画: 使用 QTimer 每 50 毫秒更新一次动画,确保动画流畅。 视觉效果: 使用 QPainter 的平滑像素转换和抗锯齿选项,提高动画…...

【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题

W...Y的主页 😊 代码仓库分享 💕 前言:在之前的进程间通信时我们就讲到过信号量,他的本质就是一个计数器,用来描述临界资源的一个计数器。我们当时使用电影院的例子来说明信号量。电影院的座位被我们称为临界资源&a…...

MathType7.5破解版下载安装激活图文详细教程(附激活秘钥)

🌟 引言:揭秘MathType,数学编辑的瑞士军刀! 嘿,各位小伙伴,今天我要给你们安利一个我超级喜欢的数学神器——MathType!如果你跟我一样,在处理数学公式时常常感到头疼,那你…...

2-62 基于MATLAB gui 编制短波通信系统

基于MATLAB gui 编制短波通信系统,录制一段语音信号,分别通过AM SSB DSB 等调制信号,加入噪声,然后解调出来,可比较各种调制解调方式的优劣。程序已调通,可直接运行。 2-62 matlab gui - 小红书 (xiaohongs…...

windows C++-C++/WinRT 中创建组件和事件(下)

跨 ABI 的简单信号 如果无需连同事件传递任何形参或实参,则可以定义自己的简单 Windows 运行时委托类型。 以下示例展示 Thermometer 运行时类的更简易版本。 它声明名为 SignalDelegate 的委托类型,然后使用该类型来引发信号类型事件,而不是…...

C++初学者指南-5.标准库(第二部分)--二叉堆操作

C初学者指南-5.标准库(第二部分)–二叉堆操作 文章目录 C初学者指南-5.标准库(第二部分)--二叉堆操作背景什么是“堆”二叉最大堆二叉树的表示 堆操作C标准库中的堆初始化堆收缩堆增长堆 辅助操作sort_heap (Heap → Sorted Array)is_heapis_heap_until 相关内容 不熟悉 C 的标…...

在Ubuntu 16.04上安装Git的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 在现代软件开发中,一个不可或缺的工具是某种版本控制系统。版本控制系统允许您在源代码级别跟踪软件。您可以跟踪更改…...

redis内存淘汰策略-------Reservoir Sampling(水库采样)

文章目录 过期删除策略和内存淘汰策略内存淘汰策略evictionPoolEntryevictionPoolPopulate Reservoir SamplingdictGetRandomKeydictGetSomeKeysReservoir Samplingchatgpt对Reservoir Sampling的介绍 过期删除策略和内存淘汰策略 详细介绍请参考博客“redis过期删除策略和内存…...

C++《类和对象》(上)

在之前的C入门基础知识中我们了解了C的发展过程已经重要性,还初步了解了C中一些相比C语言特有的知识点,例如命名空间、缺少参数、函数重载、引用等,接下来在本篇中我们将开始C整个体系中非常重要的一个知识章节——类和对象,类和对…...