Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使项目在K语法规则中可选或可重复?

如何使项目在K语法规则中可选或可重复?
EN

Stack Overflow用户
提问于 2021-05-30 23:46:04
回答 2查看 50关注 0票数 1

如何用K框架转换下面的EBNF规则?

元素可用于表示前一个元素中的零或多个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
items ::= {"," item}*

目前,我正在使用来自域模块的列表。但是内联List声明是不允许的,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
syntax Foo ::= Stmt List{Id, ""}

现在,我必须为列出的项创建一个新的语法规则来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
syntax Ids ::= List{Id, ""} 
syntax Foo ::= Stmt Ids 

还有其他方法来对抗这种新规则的产生吗?

一个元素可以出现零或一次。换句话说,它可以是可选的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array-decl ::= <variable> "[" {Int}? "]"

我们想接受的地方:a[4]a[]。现在,为了绕过这个规则,我创建了两个规则,其中一个分支拥有项,而另一个分支没有。但在我看来,这个解决方案以一种不必要的方式重复了规则。

元素可以显示一个或多个先前的元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
e ::= {a-z}+

我们不接受任何大小写字母的非零长度序列。现在,我没有找到一个方法来模拟这个。

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-31 03:25:54

内联零或更多的结果在K-框架中受到限制,因为后端不支持带有可变参数的术语。

因此,我们要求将每个列表声明为一个单独的产品,这将产生一个反对列表。典型的功能样式匹配可以用来处理AST。

典型的EBNF扩展如下所示:

{Id ","}* - syntax Ids ::= List{Id, ","}

{Id ","}+ - syntax Ids ::= NeList{Id, ","}

Id? - syntax OptionalId ::= "" [klabel(none)] | Id [klabel(some)]

可选(?)产品也有同样的问题。因此,我们要求用户指定可由规则引用的标签。请注意,语义模块中不允许出现空的生成,因为它可能会干扰规则中的具体语法的解析。因此,您需要创建一个具有大多数语法的公共模块,以及一个具有可能干扰规则解析的结果的*-SYNTAX模块(可能与K变量冲突的空生成和标记)。

票数 2
EN

Stack Overflow用户

发布于 2021-05-31 03:20:31

  1. 不,目前没有任何机制来做到这一点,没有额外的生产。
  2. 我通常这样做: 语法MaybeFoo ::= ".MaybeFoo“\ Foo语法ArrayDecl ::=变量”MaybeFoo“
  3. 非空列表可以声明为类似于列表: 语法条::= NeList{Bar,","}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67769733

复制
相关文章
varchar和nvarchar区别
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表
西柚dzh
2022/06/09
4740
关于数据存储类型的一点分析
简介     SQL Server每个表中各列的数据类型的有各种形式,产生的效果也各有不同,我们主要根据效率兼顾性能的情况下讨论下如何规定类型。     在SQL Server中,数据的存储以页为单位。八个页为一个区。一页为8K,一个区为64K,这个意味着1M的空间可以容纳16个区。       SQL Server中的分配单元分为三种,分别为存储行内数据的In_Row_Data,存储Lob对象的LOB_Data,存储溢出数据的Row_Overflow_data。下面我们通过一个更具体的例子来理解这三种分配
用户1217611
2018/01/30
8940
关于数据存储类型的一点分析
【SQL Server】系统学习之二:索引优化
页大小8192个字节,行限制为8060字节(大型对象除外)。 包含varchar nvarchar varbinary sql_variant(8012,object类型) clr 的行,如果行大小超过8060,最大的上述列,被移动到行溢出分配单元。如果列超过8000,还会被存储为大型对象。 分配单元:IN_ROW_DATA               Row_OVERFLOW_DATA               LOB_DATA 分配顺序扫描:基于IAM页(索引分配映射) 一个IAM只能映射某一个表分区
小端
2018/04/11
7540
【SQL Server】系统学习之二:索引优化
常用的数据库的字段类型及大小比较_sql字段长度
ORACLE的数据类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 LONG RAW 可变长度的二进制数据 最大长度2G 同上 BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G NCLOB 根据字符集而定的字符数据 最大长度4G BFILE 存放在数据库外的二进制数据 最大长度4G ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes NUMBER(P,S) 数字类型 P为整数位,S为小数位 DECIMAL(P,S) 数字类型 P为整数位,S为小数位 INTEGER 整数类型 小的整数 FLOAT 浮点数类型 NUMBER(38),双精度 REAL 实数类型
全栈程序员站长
2022/10/04
3.9K0
常用的数据库的字段类型及大小比较_sql字段长度
MySQL数据库设计
  mysql:    dbs  数据库系统    bdms  数据库管理系统    bda   数据库管理员    db    数据库    dba通过dbms来操作db! 软件项目开发周期中数据库设计 01.需求分析阶段:分析客户的业务和数据处理需求 02.概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整 03.详细设计阶段:应用三大范式审核数据库结构 04.代码编写阶段:物理实现数据库,编码实现应用 05.软件测试阶段:…… 06.安装部署:……   数据库设计步骤:     0
房上的猫
2018/03/14
2.6K0
SQLServer中char、varchar、nchar、nvarchar的区别:
nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
孙晨c
2019/09/05
5.9K0
SQLServer中char、varchar、nchar、nvarchar的区别:
混合字节序、小字节序和大字节序(网络字节序)
下面代码可能的输出结果是() int main() {         unsigned x = 0x12345678;         unsigned char *p = (unsigned char*)&x;         for (int i=0; i<4; i++)         {                 printf("%x\n", *p);                 p++;         }         return 0; } 参考:http://zh.wikipedia.org/wiki/字节序
一见
2018/08/10
7870
数据库中char varchar nchar nvarchar的区别
我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char varchar nchar nvarchar,我们该如何进行?
瑞新
2020/07/08
7520
SQL Server中char、nchar、varchar、nvarchar的区别
对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。
用户7353950
2022/06/23
1.6K0
SQL Server中char、nchar、varchar、nvarchar的区别
nchar,char,varchar与nvarchar区别「建议收藏」
今天建合作用的数据库,发现每个字段默认的类型为nchar(10),以前我们经常接触的也就是char和varchar,那前面加了n之后会有什么不同呢?
全栈程序员站长
2022/08/09
7060
字节和字符
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。
泰斗贤若如
2019/10/13
2.4K0
Oracle三大类型(varchar2,number,date)转换
Oracle中三大类型与隐式数据类型转换  (1)varchar2变长/char定长-->number,例如:'123'->123 (2)varchar2/char-->date,例如:'25-4月-15'->'25-4月-15' (3)number---->varchar2/char,例如:123->'123' (4)date------>varchar2/char,例如:'25-4月-15'->'25-4月-15'
星哥玩云
2022/08/17
2.8K0
腾讯和字节待遇_字节和腾讯哪个值得去
大家好,我是鱼皮,最近这段时间,应该是正值大三的小伙伴最忙碌的时候,不少同学都在准备秋季校园招聘。
全栈程序员站长
2022/11/08
2.2K0
腾讯和字节待遇_字节和腾讯哪个值得去
nvarchar,nchar,vchar,nvchar,char…
nvarchar,nchar,vchar,nvchar,char,ntext,text区别详解 联机帮助上的:
恋喵大鲤鱼
2018/08/03
1K0
数据库 — char、varchar、varchar2区别
char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。
全栈程序员站长
2022/09/06
7200
sqlite 数据类型
一般数据采用固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
阳光岛主
2019/02/19
2.4K0
支持超过4000字节的varchar2类型
Oracle中最常用的字符串类型可能就是varchar2了,但是一直以来,让人吐槽最多的,可能就是他的存储容量,12c之前,允许存储4000字节,请注意这的单位是字节,如果你按照非常规的字符定义字段,就得结合字符集,确定他能存储的容量。如果要存储超过这个限制的字符,就得改为CLOB类型了,他的容量是4G,另外一种变通的形式,不想使用大字段,就将要存储的字符拆成多个varchar2类型的字段,读的时候拼接这些字段,起到一样的效果。
bisal
2021/09/06
1.2K0
支持超过4000字节的varchar2类型
关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
根据给定的文章内容,撰写摘要总结。
林冠宏-指尖下的幽灵
2018/01/02
2.4K0
你知道 varchar(N) 或 varchar2(N) 中的 N 是字符数还是字节数?
其中 book_name 是 varchar(20) 类型。 插入 sql 语句如下:
IT技术小咖
2020/02/13
4.3K0
你知道 varchar(N) 或 varchar2(N) 中的 N 是字符数还是字节数?
Java面试手册:数据库 ②
使用数据库的必要性 无论是集合、对象、程序一旦重启所有数据全部消失,无法做到持久化保存 xml 是可以保存数据的 另外还可以通过IO流将数据保存到本地磁盘,但是数据缺乏结构化,无法描述复杂的业务逻辑,且读写比较慢。 java 里面双引号表示String 类型,单引号表示char类型,而数据库中是char(长度不尅变)和varchar(长度可变) 关于数据库 一个项是数据库先行(表结构的设计、关系到项目的成败),每一个项目都有自己的数据库,项目经理将创建好的数据库放到一个服务器上,但开发的时候是个人考下
南风
2018/12/10
1.3K0
Java面试手册:数据库 ②

相似问题

SQL Server 2008中是否调整了每行8060字节的限制?

33

SQL NVARCHAR和VARCHAR限制

56

如何限制文本区域的每行字节?

21

为什么varchar的最大长度小于8000字节?

42

在Server中超过每行8060字节的性能影响是什么?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文