首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RFC 2396中的语法(关于URI)如何在PEG中表达?

在RFC 2396中,定义了URI(Uniform Resource Identifier)的语法规范。为了在PEG(Parsing Expression Grammar)中表达这个语法,我们可以按照以下步骤进行:

  1. 首先,我们需要了解RFC 2396中URI的语法规则。URI由多个组件组成,包括scheme、authority、path、query和fragment等部分。每个部分都有特定的语法要求和可能的取值范围。
  2. 在PEG中,我们可以使用规则来表示语法的不同部分。对于URI的不同组件,我们可以定义相应的规则来匹配其语法要求。
  3. 针对URI的不同组件,我们可以使用正则表达式或其他语法规则来定义相应的规则。例如,对于scheme部分,可以使用正则表达式来匹配合法的scheme值。
  4. 对于URI的各个组件之间的分隔符和连接符,我们可以使用PEG中的序列操作符和选择操作符来表示。例如,使用序列操作符表示authority部分的语法要求,使用选择操作符表示path部分的语法要求。
  5. 在定义规则时,可以使用PEG中的重复操作符来表示某些组件的重复出现。例如,query部分可以包含多个参数,可以使用重复操作符来表示多个参数的语法要求。

综上所述,通过使用PEG的规则和操作符,我们可以在RFC 2396中定义的URI语法规范在PEG中进行表达。具体的表达方式可以根据具体需求和语法要求进行调整和定义。

请注意,由于要求不能提及特定的云计算品牌商,因此无法提供腾讯云相关产品和产品介绍链接地址。如有其他问题,欢迎继续提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python之父发文,将重构现有核心解析器

引号字符串 '+' 或 'if' 也是标记符。(我以后会讲讲标记符。)语法规则以其名称开头,跟在后面的是 : 号,再后面则是一个或多个以 | 符号分隔可选内容(alternatives)。...但问题是,如果你这样写语法,解析器不会起作用,pgen 将会罢工。 其中一个原因是某些规则( expr 和 term)是左递归,而 pgen 还不足以聪明地解析。...但是在这种玩具语言(以及在 Python),还有另一个烦人问题。 由于前向单一标记符,解析器无法确定它查看是一个表达开头,还是一个赋值。...(这也不完全正确,因为语法在技术上并不会导致歧义;但我们先不管它,因为我想不到更好词来表达。那么 pgen 是如何做决定呢?...我还有很多内容要写,关于 PEG 解析以及我具体实现,但是要等我整理好代码后,在后续文章再去写了。

1K10
  • Python 之父新发文,将替换现有解析器

    引号字符串 '+' 或 'if' 也是标记符。(我以后会讲讲标记符。)语法规则以其名称开头,跟在后面的是 : 号,再后面则是一个或多个以 | 符号分隔可选内容(alternatives)。...但问题是,如果你这样写语法,解析器不会起作用,pgen 将会罢工。 其中一个原因是某些规则( expr 和 term)是左递归,而 pgen 还不足以聪明地解析。...但是在这种玩具语言(以及在 Python),还有另一个烦人问题。 由于前向单一标记符,解析器无法确定它查看是一个表达开头,还是一个赋值。...(这也不完全正确,因为语法在技术上并不会导致歧义;但我们先不管它,因为我想不到更好词来表达。那么 pgen 是如何做决定呢?...我还有很多内容要写,关于 PEG 解析以及我具体实现,但是要等我整理好代码后,在后续文章再去写了。----

    1.1K30

    再探 Parser 和 Parser Combinator

    我们之前用 BNF 工具(比如 Flex/Bison)用于撰写解析 CFG。PEG 和 CFG 主要区别是:PEG 会在语法歧义发生时总选择第一个匹配项,而 CFG 则是未定义。...所以,PEG 总会只生成一棵满足规则语法树,而 CFG 有可能产生多棵,需要开发者手动消歧。...为了方便解析和生成合适语法树,pest 提供了一些方法可以控制哪些内容在语法树中生成: _{}:如果一条规则前加 _,意味着这个规则本身不会出现在语法(只出现其子规则)。...,只不多 nom 用一个个函数来表达语法,而 pest 用 DSL 来描述语法。...我觉得这个速度还不够快,理想情况下,一个复杂表达求值应该能在 1ms 之内,也许等我对 nom 理解更深刻,撰写语法表达更简洁时,可以达到这一目标。

    2.4K10

    Python 之父再发文:构建一个 PEG 解析器

    本文主要介绍了构建一个 PEG 解析器大体思路,并介绍了一些基本语法规则。...PEG 语法构建解析器替换 CPython 解析器。...以下简称为“标记器”) PEG 解析器(像其它现代解析器, ANTLR)通常会把标记与解析过程统一。但是对于我项目,我选择保留单独标记器。...我猜你可能会先将整个输入内容标记到一个 Python 列表里,将其作为解析器输入,但这意味着如果在文件末尾处存在着无效标记(例如一个字符串缺少结束引号),而在文件前面还有语法错误,那你首先会收到关于标记错误信息...不管怎样,下面是未来一些主题: 根据语法生成解析代码 packrat 解析(记忆法) EBNF 特性,(x | y)、[x y …]、x* 、x+ tracing (用于调试解析器或语法PEG

    1.3K20

    Python 之父解析器系列之六:给 PEG 语法添加动作

    如果你在语法规则还可以添加(某些)语义,那么语法就会更好。特别是对于我正在构建 Python 解析器,我需要控制每个备选项返回 AST 节点,因为 AST 格式已经规定好。...【这是我 PEG 系列第 6 部分。...动作块代码通常与编写编译器语言相同, C 语言,增加一些工具,用于引用备选项条目。在 Python 原始 pgen ,我没有添加此功能,但对于这个新项目,我希望使用它。...在 PEG 解析器,因为有无限回溯,我们有其它选择: 延迟所有动作,直到解析完所有内容。这对我目的没有用,因为我想在解析期间构造一个 AST。...关于 {花括号} 里面的内容,传统上是使用 C 语言,它约定用 $ 符号来引用已识别的备选项(例如,$1 引用第一个条目),并赋值给 $$ 以指示动作结果。

    56220

    深入理解Web请求:从RFC 2616协议文本入手

    但是,许多开发者可能对Web请求一些概念,请求、请求头、请求方式、响应、响应头、响应码等,仍然存在一些模糊认识。为了真正理解和掌握这些概念,我们需要从RFC 2616协议文本入手。...请求行包括请求方式(GET、POST等)、请求URI和HTTP协议版本。 2. 请求头(Request Header):用于提供关于请求附加信息,User-Agent、Accept等。...响应头(Response Header):类似于请求头,响应头用于提供关于响应附加信息,Content-Type、Set-Cookie等。 6....在深入理解了这些概念之后,我们需要通过实践来掌握如何在实际开发运用它们。...在代码可以使用类似requests.delete()方式发起DELETE请求。 在实际开发,我们还需要注意一些细节问题,处理异常、设置超时时间、配置代理等。

    2.3K10

    Rust 官方周报 385 期(2021-04-07)

    ;2、目前官方 rustc 版本为 1.51.0) rust-analyzer 更新日志 #71 Rust 中新左递归 PEG 解析生成器 Flott(Rust 运动控制工具包)月报 - 2021...O 函数,可作为参数或返回值在程序传递, File。...或许 first-class 不翻更好理解) 当前程序打包发布人安全噩梦 对请求排序,以加速 I/O 关于 Rust 已检查异常(checked exception)短文 离奇架构设计,从开始就不要支持...谢谢 Jan Walter 提议! 关于下周最佳 crate,请您提议,并投票!! 参与邀请 您一直想为开源项目做贡献,但却不知道从哪里开始吗?每周,我们都会强调一些来自 Rust 社区任务。...如下是本周核准实现 RFCs: RFC:声明宏原变量表达式(Declarative macro metavariable expressions) 新 RFCs RFC:预留 2021 版代号(Reserved

    50220

    聊聊PegJS

    在开发前端BFF框架时候,需要将团队后台使用JCE协议(类似ProtoBuff协议)转换成nodejs对应语法,这里参考@tencent/jce2node-cli实现,使用PEG.js解析生成AST...,下面就来介绍一下PEG.js是如何进行解析?...它语法对前端工程师很友好,只需要掌握基本正则语法即可,并提供在线体验网址。下面是基于PegJS语法一个官方示例,它语法有这样两个特点: PegJS语法由一组规则组成,从上至下进行解析。...起始规则是整个语法『根』,后面的所有规则定义都应该是这个『根』子节点,如果某个规则无法从『根』溯源下去,那么这个规则就是一条无效规则。 规则形似变量声明,由名称和解析表达式组成。...默认情况下,使用了+和* 匹配出结果会返回一个数组,PegJS 提供在表达通过变量名和一个format函数来自定义返回值。

    1.4K40

    Python 3.12正式发布:性能提升、no-GIL将在3.13提供

    经过这些变化,使得 f-strings 更加统一,成为一种可以直接整合到解析器正式化语法。这将会为终端用户和库开发者带来较大优势,同时也大大降低用于解析 f-strings 代码维护成本。...f-strings 解析代码无法使用新 PEG 解析器所允许新错误消息机制,这些错误消息带来改进已经受到了热烈欢迎,但因为 f-strings 用是独立解析器,所以无法使用上新改进错误消息机制...另外,因为 f-strings 有几个语法特性可能会因为在表达式部分内部发生不同隐式标记化而令人困惑(例如 f"{y:=3}" 并不是一个赋值表达式)。...这一点很重要,因为有几个知名替代实现正在使用 CPython PEG 解析器, PyPy。...f-strings 使用一个独立解析器,阻止了这些替代实现利用官方语法,以及从改进错误消息机制受益。 期待新 f-strings 能用得更顺心。

    92040

    RFC1945 超文本传输协议--HTTP1.0 之一

    在涉及HTTP以前,URI用简单格式 字符串描述-名字、位置、或其它特性,网络资源。...3.2.1 一般语法(General Syntax) 在HTTPURI可以用绝对形式表示,也可用相对于某一基本URI[9]形式表示,具 体取决于它们使用方式。...语法及语义信息请参见RFC1738[4]和RFC1808[9]。...上面所提到BNF 包括了合法URL不允许出现符号(RFC1738),因为HTTP服务器并没有限制为只能用 非保留字符集中字符来表示地址路径,而且HTTP代理也可能接收到RFC1738没有定义...实际上, 新或实验标题域只要能被通讯各方识别,其语法就可使用,而无法识别的标题域都将 被视为实体域。

    1.3K20

    【译】 WebSocket 协议第十一章——IANA 注意事项(IANA Considerations)

    URI 协议名称 ws 状态 永久 URI 协议语法 使用 ABNF (RFC5234)语法和来自 URI 规范 RFC3986 ABNF 终端: "ws:" "//" authority path-abempty...编码注意事项 按照上面定义语法排除主机部分字符必须按照 RFC3987 规定从 Unicode 转换为 ASCII 或其替换字符。...除了由上面语法排除字符外,其他组件字符在第一次转换为 UTF-8 字符时,必须从 Unicode 码转化到 ASCII 码,然后使用百分比编码格式替换对应定义在 URI RFC3896 字符和国际化资源标识符...URI 协议名称 wss 状态 永久 URI 协议语法 使用 ABNF (RFC5234)语法和来自 URI 规范 RFC3986 ABNF 终端: "wss:" "//" authority path-abempty...编码注意事项 按照上面定义语法排除主机部分字符必须按照 RFC3987 规定从 Unicode 转换为 ASCII 或其替换字符。

    87930

    HTTP接口设计

    ,此时请求实体会被视作标准 POST 风格参数进行处理 关于方法语义说明: OPTIONS 用于获取资源支持所有 HTTP 方法 HEAD 用于只获取请求某个资源返回头信息 GET用于从服务器获取某个资源信息... GET 成功 201 Created : 对象创建成功并返回相应资源数据, POST 成功;创建完成后响应头中应该携带头标 Location ,指向新建资源地址 202 Accepted : 接受请求...重定向 重定向新地址都需要在响应头 Location 返回 301 Moved Permanently : 被请求资源已永久移动到新位置 302 Found : 请求资源现在临时从不同 URI...7232 HTTP 缓存 - Google Developers RFC 2616 缓存过期时间算法, MDN 版, 中文版 HTTP 协议 Vary 一些研究 Cache Control 與...URI 相关资料: 《RESTful Web Services Cookbook 中文版》 10.4 节 《如何在服务器端实现条件 PUT 请求》 RFC 7232 "Conditional Requests

    1.8K20

    中文URL编码

    URL编码是一个比较麻烦事情,RFC 3986是关于URI一个标准,在它第2节定义了字符如何在URI中进行表示,而第3节把一个URI区分为scheme, hier-part, query, fragment...根据这个RFC,A URI is composed from a limited set of characters consisting of digits, letters, and a few graphic...URL编码要求先将URL转换为一个UTF-8字节序列,然后再做percent encoding, 这在RFC 3986和W3C网站上都有介绍。...关于它们三个比较,可参考这篇文章。 如果没有现成函数,对UTF-8字节序列进行percent encoding也是比较方便。...有时间时候我会再写一篇关于怎么在Windows把中文转换为UTF-8字节序列文章,对进行中文URL编码朋友也许会有帮助。见“GBK(GB2312)向UTF-8编码转换”一文。

    2.7K50

    RFC1945 超文本传输协议--HTTP1.0 之二

    请求URI以编码字符串方式传输,有些字符可能在传输过程中被转义(escape),变 成“%HEXHEX”形式。具体这方面内容请参见RFC1738[4]。...实际上,新 或实验标题域只要能被通讯各方识别,其语法就可使用,而无法识别的标题域都将被 视为实体域。 6....10.6 日期(Date) 日期普通标题(Date general-header)域表示消息产生时间,其语法RFC822定义 orig-date是一样。...Paul Hoffman 提供了关于信息状态方面的信息,以及附录C、D内容。 该文档从HTTP-WG成员评注得益非浅。...C.3 内容编码介绍(Introduction of Content-Encoding) RFC1521不包括殊HTTP/1.0内容编码标题域之类概念。

    1.1K10

    分布式系统核心:REST风格架构,REST成熟度模型及REST API管理

    他提出关于REST成熟度模型(Richardson Maturity Model),将REST实现划分为不同等级。图8-1展示了不同等级成熟度模型。 ?...◆ 第1级:引入了资源概念 在第1级,Web服务引入了“资源”概念,每个资源有对应标识符和表达。所以,不是将所有的请求发送到单个服务端点,而是和单独资源进行交互。...HATEOAS是Hypertext AsThe Engine Of Application State缩写,是指在资源表达包含了链接信息,客户端可以根据链接来发现可以执行动作。...当服务器发生变化(修改了资源URI)时,客户端也需要进行相应修改。而在使用HATEOASREST服务,客户端可以通过服务器提供资源表达来智能地发现可以执行操作。...它由RFC 2616规范定义,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。

    89620
    领券