范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

从零开始设计中文编程语言SQL领域演示

  通过逐步完善一个简单的中文编程语言语法并最后转换为 SQL 语句,演示一种快速搭建中文编程语言原型的方法。
  达成效果是,如下的中文语句:创建读者表,编号为整数,出生年为文本
  转换生成 SQL 语句:CREATE TABLE 读者 ( 编号 INTEGER, 出生年 TEXT )
  文中代码在 Python 3.8 下运行通过,需安装 RPly 木兰定制版 0.8.0。一、中文标识符
  首先来识别一个标识符——"读者"。下面是完整代码。from rply import 分词器母机, 语法分析器母机  分词母机 = 分词器母机() 分词母机.添了("标识符", r"读者")  分析器母机 = 语法分析器母机(["标识符"])  @分析器母机.语法规则("句 : 标识符") def 句(片段):     return 片段[0].getstr() # 第一个片段的内容  分词器 = 分词母机.产出() 分析器 = 分析器母机.产出()  print(分析器.按语法分词(分词器.分词("读者")))
  运行此源码文件可见输出。
  先简单看下源码,分词母机添加的一条词法规则:标识符可以是"读者"。分析器母机添加的一条语法规则:句子只包含一个标识符,而且解析后直接输出它的内容(在 "句(片段)"方法中返回)。
  最后对"读者"这一字符串进行按语法分词,输出的就是"读者"。(输出还有一句"回退次数:0",请暂时无视)
  当然,标识符不止有"读者",于是将词法改为如下正则表达式,允许多个中文字符:分词母机.添了("标识符", r"[一-龥]+")
  这样,即使末句改为"观众",也可被识别。二、创建读者表
  从创建表格开始设计语法,添加些关键词。先来一个"表",希望能解析"读者表"后输出表名"读者"。
  添加对应词法规则:分词母机.添了("表", "表")
  记得将它加到语法分析母机的词表中(注:此文后面的部分不再复述此代码,忘加的话就会碰到 "KeyError: "表"" 这种报错):分析器母机 = 语法分析器母机(["表", "标识符"])
  接着把语法规则改为:@分析器母机.语法规则("句 : 标识符 表")
  好了,现在对"读者表"进行解析,即末句改为:print(分析器.按语法分词(分词器.分词("读者表")))
  如期输出了"读者"。
  同理添加"创建",希望解析"创建读者表"后暂仍输出"读者"。照样添加词法规则(注:此文之后部分不再复述此代码):分词母机.添了("创建", "创建")
  改语法规则:句 : 创建 标识符 表
  好,现在解析"创建读者表",但为何输出"创建"了呢?
  细看一下这段:@分析器母机.语法规则("句 : 创建 标识符 表") def 句(片段):     return 片段[0].getstr()
  修改语法规则后,现在一"句"中有三个片段,"片段[0]"现在对应的是"创建",标识符应该是第二个片段,即"片段[1]"。修改之后,解析"创建读者表"就如期输出"读者"。三、单列
  创建表格时,可以对列进行声明,比如:"创建读者表,出生年为整数"。先支持一列。
  添加"为"、"整数"两个关键词,并添加中文逗号:分词母机.添了("逗号", ",")
  语法呢?"创建读者表,出生年为整数"的第一部分是表声明,后面是逗号,以及列声明。那么就加这条语法规则:建表 : 表声明 逗号 列声明
  表声明的规则与之前相同:表声明 : 创建 标识符 表
  列声明的语法就是:列声明 : 标识符 为 整数
  与表声明类似,"片段[0].getstr()"就可从列声明中获得列名。
  需注意的是,在建表方法中,片段[0] 取得的是表声明的输出值,即标识符名,这里不需再用 getstr()。另可用格式化字符串简化代码如下:def 建表(片段):     return f"{片段[0]}:{片段[2]}"
  解析"创建读者表,出生年为整数"后输出:"读者:出生年"四、多列
  表格当然可以有多列。比如:"创建读者表,编号为整数,出生年为整数"。
  原本在表声明后的单一列声明,现在变为了对各列的声明:建表 : 表声明 逗号 各列声明
  如何描述各列声明的语法规则呢?分情况来看,如果只包含一个列声明,就这样:各列声明 : 列声明
  如果包含更多呢?可以这样描述,在一个"各列声明"后面再加上逗号和一个"列声明",有点递归的意思:各列声明 : 各列声明 逗号 列声明
  那么如何区分处理这两种情况?看这段,各列声明的两种规则放在一起,用一个方法处理:@分析器母机.语法规则("各列声明 : 列声明") @分析器母机.语法规则("各列声明 : 各列声明 逗号 列声明") def 各列声明(片段):     return f"{片段[0]}" if len(片段) == 1 else f"{片段[0]},{片段[2]}"
  这里通过判断片段的个数来区分,还有其他方法比如判断某词的类型。
  至此解析"创建读者表,编号为整数,出生年为整数"后输出:"读者:编号,出生年"五、多种数据类型
  除了整数,还可以有其他的列类型,比如文本。这也方便,与"整数"类似,添加"文本"一词后,添加如下语法:列类型 : 整数 | 文本
  这与上面的"各列声明"分两行效果相同,是同一语法元素的多种并列规则。
  再把原本的列声明改为:列声明 : 标识符 为 列类型
  列声明的输出加上列类型后,解析"创建读者表,编号为整数,出生年为文本"后输出:"读者:编号-整数,出生年-文本"六、转换为SQL
  至此,各语法元素看起来解析无误,那么各语法规则已定,这部分仅对处理方法的返回值作了修改。
  举几个例子,列类型应该返回 INTEGER 或者 TEXT:return "INTEGER" if 片段[0].getstr()=="整数" else "TEXT"
  表声明部分:return f"CREATE TABLE {片段[1].getstr()}"
  建表时将各列声明置于 () 中:return f"{片段[0]} ( {片段[2]} )"
  另几处就请自行尝试吧。完整源码
  此文的完整代码约四十行,开源在此。如想继续完善创建表、记录以及其他查询、删除等语法,此测试用例 供参考。如有任何问题欢迎在源码库反馈。
  注:本文中语言的设计是在搭建原型之前就有了草稿,见 此楼。此设计尚未经过实践检验,欢迎指摘。

腾讯诉vivo案开庭,应用商店之争折射流量焦虑据济南市中院开庭公告消息,腾讯起诉vivo网络不正当竞争案20日开庭。腾讯方面此次起诉vivo的主体是腾讯应用宝,原因是vivo方面借助手机底层系统优势,通过插入弹窗文字按钮设置风实体店的全新模式未来将会淘汰传统的实体店一VR智能定制现在杭州有一种店面叫做VR智能定制,这种店面有几个关键词电子化的展示社交化的引流个性化定制供应链互联网裂变系统。当我作为一个顾客,我进入这家店,整个的服务区域和流程全马斯克人类将第一次生活在中国经济体量两三倍于美国的世界美国应该停止打自己的脸,努力与中国竞争。这是亿万富翁埃隆马斯克说的一番话。他说,中国将很快在经济实力方面超越美国。埃隆马斯克确信,经济不是政治游戏的场所,需要专注于自己的竞争力。特黑客帝国,武侠的世界,互联网就是一个没有硝烟的战场在互联网时代有这么一群人他们是对计算机科学编程和设计方面具高度理解的人他们用公共通讯网络,研究智取计算机安全系统,研究修改计算机产品,热衷于研究系统和计算机(特别是网络)内部运作他宁德时代跨入世界锂电池集体待发欧盟能源转型光伏冲出国门大惊喜!锂电池龙头宁德时代获得全球首张欧洲经济委员会R100。03动力电池系统证书。这是全世界对中国锂电池技术的认可,也体现了中国科学技术的强大!近年来,世界各国还在为化石能源供应华为5G明明领跑全世界,为何突然之间不火了?热度消散是什么原因图为5G最近大家能发现一个奇怪的问题,即使前两年火出圈的5G技术突然销声匿迹了,都知道华为作为5G技术的领头羊世界独一无二,那么华为5G明明领跑全世界,为啥突然之间不火了?难道是技世界领先!全球首艘智能型无人系统母船下水,助力中国海洋科考中国又传好消息,就在5月18日,全球首艘智能型无人系统母船,正式在中国下水,下水仪式就在中船黄埔文冲船舶有限公司长洲厂区举行。一时之间在科考领域炸了锅,那么这所谓的首艘智能型无人系2021年互联网智慧医联体信息化建设整体解决方案(附下载)区域医疗联合体(简称医联体),是将同一个区域内的医疗资源整合在一起,由医院,联合若干社区医疗中心组成,患者在医联体内可以享受到社区医疗中心不大医院之间的双向转诊化验检验结果互认与家云教智慧体育课解决方案提高学校体育教学信息化水平今年4月,教育部发布了义务教育体育与健康课程标准(2022年版),新课标将于2022年秋季学期正式实施。新课标中规定,体育与健康课占总课时比例1011。体育课超越外语课,成为小初阶高校回应副院长发不雅信息谎称账号被盗涉嫌违纪,停职调查5月20日,环球时报转载北京头条时间视频消息称,网曝郑州轻工业大学体育学院副院长谭某某工作群发色情言论。对此,体育学院党政办主任回应称,谭某某微信号确实被盗,正在补救。同期,一张腾2021北京软件和信息技术服务综合实力企业(五十八)北京超图软件股份有限公司企业简介超图集团是全球第三大亚洲第一大GIS软件厂商,母公司为超图软件(SZ300036)。超图正式员工3700余人,2020年年营业收入逾16亿元。超图聚焦于地理信息系统相关软件
盘点上半年值得入手的3款旗舰,苹果三星入选!短板屈指可数2022年上半年就快要过完了,各大品牌都发布了为今年而准备的旗舰手机,那么到现在,还有哪些手机是值得大家入手的呢?今天我们就来盘点一下。iPhone13Pro如果你预算充足,又能忍家长称9岁娃玩游戏充八万余元,华为无证据近日,河北邢台的杨先生投诉称,9岁的女儿使用家长手机,在华为平台一款名为乐乐捕鱼的游戏中前后充值了83000元。杨先生在发现此事后,立即与华为官方充值平台取得联系,并数次提供退款材华为回应9岁儿童玩游戏充83000元无法退款无证据表明系未成年人Tech星球4月4日消息,近日,针对媒体报道的河北一未成年人在华为平台下载游戏玩的过程中充值8万块钱人民币,申请退款被拒的消息,华为方面回应称,因充值账户采用的实名认证是成年人,账全球首座中本聪岛在万那杜启动!土地公民身份将变成NFT位于澳洲与斐济之间的太平洋岛国万那杜共和国(Vanuatu)有一座私人岛屿,该岛屿持有者SatoshiIslandHoldingsLimited即将正式启动占地800英亩名为中本聪时间旅行的物理学图片来源pixabay时间旅行或许是很多人的梦想,但一个坏消息是即使能够回到过去,你也无法改变已经发生的事情。这是澳大利亚昆士兰大学的两位研究人员数学建模的结论。但这个消息也有好的游戏手机大受欢迎,这三点原因很重要,游戏手机到底好在哪里?各大手机厂商之间的竞争越发激烈,除了面向大多数用户的普通手机,现在很多厂商也开始了专门针对游戏用户的游戏手机的研发,从市场的反馈来看,游戏手机的确大有市场,那么为什么游戏手机这种看元宇宙云游戏IP,应用下载超160亿次,利润率高达82,股价仅4元?这是一家主营移动互联网业务的全栖IP生态运营商,公司研发的游戏不仅可以使用VR技术,还能使主人公的形象在实景中得以呈现。而该款应用全球累计下载量已超过160亿次,平均月活跃用户数超腾讯业绩估值双底或已现,游戏广告迎政策曙光盈利回暖可期特约苏汝哲编者按随着腾讯周三公布了2021年年报及第四季度财报后,市场开始认为腾讯结束了高增长时代。但第三方独立研究公司晨星并不这样认为。在晨星看来,腾讯目前的估值已反应几乎所有风红米K40游戏增强版12256,优缺点明显多多百亿补贴,以旧换新,优惠完1739元拿下。先说下这个以旧换新,旧手机使用极为精细,前后贴膜带手机壳,无维修使用正常,旧机按实填报评估价891元,实际回收价775元,说是屏幕颜色荣耀Magic4pro一加10proOPPOfindX5pro和iQOO9Pro,怎么选择四款手机都是目前规格系列的高端旗舰,整体的参数配置都是非常不错的全新骁龙8Gen1大底主摄高规格素质屏幕100W左右超级快充,可以选哪台都可以满足日常使用。个人建议按照自己对品牌的华为mate10和荣耀V10,哪个性价比更高?虽然荣耀V10还未正式发布,价格还没有公布,但是从以往华为荣耀两个品牌的手机对比可以得出肯定是荣耀V10的性价比高。理由有以下两点1。荣耀是主打互联网的手机品牌,对标的竞品是高性价