PEG (Grako) 的选项解析不足?

2023-12-01

我的同事 PaulS 问了我以下问题:


我正在为现有语言(SystemVerilog - IEEE 标准)编写一个解析器,并且该规范中有一条结构与此类似的规则:

cover_point 
    = 
    [[data_type] identifier ':' ] 'coverpoint' identifier ';' 
    ;

data_type 
    = 
    'int' | 'float' | identifier 
    ;

identifier 
    = 
    ?/\w+/? 
    ;

问题是在解析以下合法字符串时:

anIdentifier: coverpoint another_identifier;

anIdentifier与 匹配data_type(通过其标识符选项)成功,这意味着 Grako 正在寻找其后的另一个标识符,然后失败。然后它不会尝试在没有 data_type 部分的情况下进行解析。

我可以将规则重写如下,

cover_point_rewrite  
    = 
    [data_type identifier ':' | identifier ':' ] 'coverpoint' identifier ';' 
    ;

但我想知道是否:

  1. 这是故意的并且
  2. 是否有更好的语法?

这是一般 PEG 问题还是工具(Grako)问题?


It says here在 PEG 中,选择运算符是ordered通过使用第一个匹配来避免 CFG 歧义。

在你的第一个例子中


[data_type]  
succeeds parsing id, so it fails when it finds : instead of another identifier. That may be because [data_type] behaves like (data_type | ε) so it will always parse data_type with the first id.

In


[data_type identifier ':' | identifier ':' ]  
the first choice fails when there is no second id, so the parser backtracks and tries with the second choice.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PEG (Grako) 的选项解析不足? 的相关文章

  • 读取输入文件的部分内容

    我想读取 C 中的输入文件 其结构 或缺乏 将类似于一系列带有以下内容的行 文字 数字 例如 input1 10 input2 4 set1 1 2 set2 1 e3 我想把这个号码从队列中取出 然后把剩下的扔掉 数字可以是整数或双精度数
  • VBA COM 库中的这些 _B_var_Xxxxx 和 _B_str_Xxxxx 成员到底是什么?

    想象一下以下函数调用 foo UCase bar 我正在解析这段代码 并确定UCase是一个函数调用 现在我想将该函数调用解析为定义它的 COM 库中函数的声明 这个想法是实现一个代码检查来确定何时Variant当使用内置函数时String
  • 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

    我目前正在寻找一种使用 JavaScript 从服务器 XML 响应中提取信息的简单方法 jQuery 似乎是一个很好的候选者 当谈到使用 jQuery 解析 XML 时 我不断遇到类似于以下代码片段的代码示例 function parse
  • 编程语言解析器的来源?

    我正在清理我的一个旧项目 该项目计算有关大型软件项目的许多简单指标 指标之一是文件 类 方法的长度 目前 我的代码 猜测 类 方法边界的位置基于非常粗略的算法 遍历文件 维护 当前深度 并在遇到未加引号的括号时调整它 当您返回到类或方法开始
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 编程语言语法中尾随逗号的历史

    许多编程语言允许在其语法中在列表中的最后一项后面使用尾随逗号 据说这样做是为了简化自动代码生成 这是可以理解的 作为示例 以下是 Java 中完全合法的数组初始化 JLS 10 6 数组初始值设定项 http java sun com do
  • 从 XML 构建树结构的速度很慢

    我正在将 XML 文档解析为我自己的结构 但对于大型输入来说构建它非常慢 是否有更好的方法来做到这一点 public static DomTree
  • 修复 PHP 中格式错误的 HTML?

    我正在根据用户提供的片段构建一个大型 HTML 文档 这些用户有以各种方式格式错误的烦人习惯 浏览器足够强大且宽容 但我希望能够验证并 理想情况下 修复任何格式错误的 HTML 如果可能的话 例如 td b Title b td 可以合理地
  • “单词的正则表达式”(语义替换)-任何示例语法和库吗?

    我正在寻找在给定过程语言的情况下对单词而不是字符进行正则表达式样式转换的常用技术的语法示例 例如 为了追踪复制 人们可能想要创建一份具有相似含义但具有不同单词选择的文档 我希望能够简洁地定义这些可以应用于文本流的可能的转换 例如 快速地no
  • 使用 TStringList 的分隔符解析字符串,似乎也解析空格(Delphi)

    我有一个简单的字符串 由某个字符分隔 比如说逗号 我应该能够创建一个 TStringList 并将其分隔符设置为逗号 然后将 DelimitedText 设置为我想要解析的文本 并且应该自动解析它 问题是 当我查看输出时 它还包含空格作为分
  • 使用 R 读取和转换二进制原始数据

    我有一个file https drive google com file d 0BxMpk0nhnJy6SFhxd2xuMzJYYlk edit usp sharing其中包含原始 二进制数据和 ascii 它包含一个时间戳和一个代表速度的
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • Java 库有 parseInt、parseLong、parseDouble 等接受默认值并且不抛出异常吗?

    我喜欢中的建议java中的String到Int 可能是坏数据 需要避免异常 https stackoverflow com questions 174502 string to int in java likely bad data nee
  • 用PLY解析python,如何编码缩进和缩进部分

    我试图用 PLY 解析 python 语言的函数定义 我遇到了与缩进相关的问题 例如 对于 for 语句 我希望能够知道块何时结束 我在这里阅读了python语法 http docs python org 2 reference gramm
  • 如何使用 BeautifulSoup 从表中选择特定行?

    So I have a question related to a previous question but I realized I needed to go one level more to get an 11 digit NDC
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • SQL Server OPENJSON读取嵌套json

    我有一些想要在 SQL Server 2016 中解析的 json 有一个项目 gt 结构 gt 属性的层次结构 我想编写一个解析整个层次结构的查询 但我不想通过索引号指定任何元素 即我不想做这样的事情 openjson json 0 or
  • 使用 ANTLR 验证 LL(1) 语法

    我知道 ANTLR 可以接受 LL 语法 但是 有什么方法可以使用 ANTLR 检查语法是否是 LL 1 吗 options k 1 如果你的语法不在 LL 1 中 它会发出警告

随机推荐

  • 如何使用 GPML (Matlab) 进行回归的 2D 高斯过程?

    我有一个Nx2输入矩阵称为X 我也有输出值Y这是一个向量Nx1 我创建一些数据进行测试 如下所示 Xtest linspace x min x max n Ytest linspace y min y max n 所以 矩阵Z is of
  • 如何在 Flutter 中制作 AlertDialog?

    我正在学习在 Flutter 中构建应用程序 现在我来到了警报对话框 我以前做过Android and iOS 但是如何在 Flutter 中发出警报呢 以下是一些相关的问题 如何在 Flutter 中设置 AlertDialog 操作的样
  • 在批处理文件中将字符串转换为整数

    我有一个从文件中读取的变量 var 13 145 我想将此值添加到另一个值 set a var var 5 但结果是13 5 not 13145 5 如何从字符串中删除这个 不要添加逗号 set var 13145 另外 在分配变量时 不要
  • 如何正确处理 onclick 事件和 onblur

    以下帖子与我之前提出的问题相关here 尽管这两个问题是独立的 但它们确实与我实现的相同功能相关 预测文本 我遇到的问题与这两个事件的方式有关onblur and onclick叫做 当用户在文本框中输入一些字符并决定单击建议而不是完成输入
  • 在 Android 中禁用后退按钮(不起作用)

    package com my app import java io ByteArrayOutputStream import java io File import java io FileOutputStream import java
  • 在 Mac 上安装的 VSTS 代理中运行 powershell 构建步骤?

    我在 mac 上安装了 VSTS 构建代理来构建 xamarin iOS 项目 构建工作正常 直到我添加了 powershell 构建步骤 即使我安装了 powershell for mac https github com PowerSh
  • 在 SwiftUI 中读取带有子节点的 Firebase 实时数据库父节点时出现问题

    我有以下 Firebase 实时数据库结构 posts user1 uid Kfm0p2EMcrpN8XcLOR5 created at 1490119356 786182 image height 374 9999999999999 im
  • indexedDB 最高键路径

    我在 indexedDB 中有一个使用 Emberjs 适配器填充的数据库 我已经像这样设置了键路径 this addModel App Device keyPath key 当我第一次解析数据时 我的密钥会自动递增 如下所示 data d
  • FullCalendar 限制事件数量并有更多链接

    我发现有人请求向日历添加 更多 链接并限制活动数量 这件事已经完成了吗 或者有人实施了自己的解决方案 可以分享吗 如果是这样 请发布您的代码 随着新版本 v2 1 0 beta2 于 17 天前发布Arshaw做了以下事情 已解决的问题 带
  • java中通过多线程从数据库读取

    我正在使用java中的多线程从vertica数据库读取数据 我有大约 2000 万条记录 我正在打开 5 个不同的线程 其中有这样的选择查询 start threadnum while start 20000 lt totalRecords
  • JSF - 自定义 NavigationHandler 结果值无效?

    我自己编写了一个自定义的 NavigationHandler 与下面的非常相似 但只是使用堆栈来保存历史记录 http jsfatwork irian at book de custom component html idx custom
  • 实体类的正确设计。需要建议

    例如我有实体类User public class User private long id private String name setters and getters 接下来 我添加新的实体类 Comment public class
  • 将 pandas 数据框拆分为许多块

    假设我有一个具有以下结构的数据框 observation d1 1 d2 1 d3 1 d4 1 d5 1 d6 1 d7 1 d8 1 d9 1 d10 1 d11 1 d12 1 d13 1 d14 1 d15 1 d16 1 d17
  • Ukkonen 的后缀树算法(通俗易懂)

    我现在感觉有点厚 我花了几天时间试图完全理解后缀树的构造 但由于我没有数学背景 许多解释都让我无法理解 因为它们开始过度使用数学符号系统 我发现的最接近一个好的解释是使用后缀树快速字符串搜索 但他掩盖了各个要点 并且算法的某些方面仍然不清楚
  • 关于类型细化语法的困惑

    在类型级别上 我偶然发现以下内容 sealed abstract class StSource A type S def init S create the initial state def emit s S A S emit a val
  • Extjs4组合框在网格中显示值

    请帮忙 我想展示我的displayValue在网格中 我找到了解决方案here 但我不明白如何使用它 我的代码 columns header Product id combo locked true dataIndex prod id ed
  • Android - 如何用另一个字符串替换部分字符串?

    我有一些带有数字和英语单词的字符串 我需要通过找到它们并将它们替换为该单词的本地化版本来将它们翻译成我的母语 你知道如何轻松实现字符串中的单词替换吗 Thanks Edit 我已经尝试过 字符串 to 的一部分应替换为 xyz string
  • Firebase 使用浮点数作为键

    我意识到 当将一些 JSON 数据推送到我的 Firebase 存储 其键是浮点数 时 我从服务器收到 400 HTTP 错误请求 这是我得到的回复 error Invalid data couldn t parse JSON object
  • gdb if 条件语法错误

    我在文件 test f90 中有一个非常简单的 Fortran 程序 program test real x x 12 write x end program test 我用它编译 gfortran g test f90 然后我尝试使用 g
  • PEG (Grako) 的选项解析不足?

    我的同事 PaulS 问了我以下问题 我正在为现有语言 SystemVerilog IEEE 标准 编写一个解析器 并且该规范中有一条结构与此类似的规则 cover point data type identifier coverpoint