ANTLRv4:非贪婪规则

2023-11-27

我正在阅读明确的 ANTLR4 参考文献,并对其中一个示例有疑问(第 76 页):

STRING: '"' (ESC|.)*? '"';
fragment 
ESC: '\\"' | '\\\\' ;

该规则与典型的 C++ 字符串匹配 - 包含在"",其中可以包含\" too.

在我的预期中,规则STRING由于非贪婪构造,应该匹配可能的最小字符串。所以如果它看到一个\"它会映射\ to . and " to "在规则的末尾,因为这将导致可能的最小字符串。取而代之的是一个\"被映射到ESC。我有一个理解问题,因为这不是我所期望的。

这里到底发生了什么?是不是这样,一个单独的DFA匹配(ESC|.)首先,还有另一场 DFA 比赛STRING使用已经匹配的字符串(ESC|.)构造?我必须承认我还没有读完这本书。


ANTLR 4 词法分析器通常以最长匹配获胜行为进行操作,而不考虑替代项在语法中出现的顺序。如果两个词法分析器rules匹配相同的最长输入序列,然后比较这些规则的相对顺序,以确定如何分配令牌类型。

一旦词法分析器达到非贪婪的可选或闭包,规则内的行为就会发生变化。从那一刻起到规则的末尾,该规则内的所有替代方案都将被视为有序,并且具有最低替代方案的路径获胜。这种看似奇怪的行为实际上是造成非贪婪处理的原因我们在底层 ATN 表示中订购替代方案的方式。当词法分析器处于此模式并到达块时(ESC|.),排序约束要求它使用ESC如果可能的话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ANTLRv4:非贪婪规则 的相关文章

  • ANTLR 3 中 wikitext-to-HTML 的工作示例

    我试图在 ANTLR 3 中充实一个 wikitext to HTML 翻译器 但我一直陷入困境 您知道我可以检查的工作示例吗 我尝试了 MediaWiki ANTLR 语法和 Wiki Creole 语法 但无法让它们在 ANTLR 3
  • ANTLR语法互左递归

    我确实知道这个问题已经被问过很多次了 我正在尝试使用 ANTLR 构建语法 Predicate LOWERCASE Predicate VarChars VarChars LOWERCASE UPPERCASE fragment LOWER
  • ANTLR 解析器挂在 proxy.handshake 调用上

    我正在尝试让基本的 ECMAScript 解析器工作 并找到了完整的 ANTLR 语法ECMAScript 3 http research xebic com es3 它似乎编译正常并生成适当的 Lexer Parser Walker Ja
  • 可视化使用 ANTLR 创建的 AST(在 .Net 环境中)

    为了一个我喜欢的项目 我开始摆弄 ANTLR 在学习了一些教程之后 我现在尝试为我自己的语言创建语法并生成 AST 现在我主要在 ANTLRWorks 中闲逛 但现在我已经验证了解析树似乎没问题 我想 迭代地 因为我仍在学习 仍然需要对最终
  • 将 Antlr 语法树转换为有用的对象

    我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为可以在我的程序中使用的有用对象 我语法的目的 除了学习之外 是创建一种可执行 运行时解释 语言 例如 我将如何获取属性子树并实例化特定的属性类 例如 以下代码用我的语
  • 使用 ANTLR 解析循环

    我想使用 ANTLR 解析一个简单的类似 matlab 的 for 循环 循环就像 for i 1 8 y i a i i end 我想解析循环并解析8次y i a i i语句 以便对每个语句执行一些操作 我的规则如下 操作在 C 中描述
  • 使用 ANTLR 通过 Python 解析一些 Java 代码

    我想在 Python 中使用 ANTLR 构建一个 Java 解析器 我从 ANTLR 存储库下载了语法 Lexer https github com antlr grammars v4 blob master java java Java
  • Antlr4 - 有使用 ParseTree Walker 的简单示例吗?

    Antlr4 有一个新类 ParseTreeWalker 但我该如何使用它呢 我正在寻找一个最小的工作示例 我的语法文件是 gram g4 我想解析文件 program txt 到目前为止 这是我的代码 这假设 ANTLR 已经运行了我的语
  • 有谁知道在 ANTLRWorks 中调试树语法的方法

    ANTLR 使用的推荐模式是让解析器构造一个抽象语法树 然后构建树遍历器 又称树语法 来处理它们 我试图弄清楚为什么我的树语法不起作用 并且希望使用 ANTLRWorks 的调试器 就像我将其用于解析器本身一样 解析器的输入是 源代码 但树
  • ANTLR4 不报告歧义

    给出以下语法 grammar ReportAmbiguity unit statements statements callStatement lt uncomment this line callStatement CALL ID arg
  • ANTLR @header、@parser、superClass 选项和基本文件 io (Java)

    我想将解析器操作与基本文件 io Java 一起使用 例如 G ANTLR 语法中的 PrintWriter 我必须使用 superClass 选项还是可以使用 header 在这两种情况下 我如何声明 PrintWriter 对象以及如何
  • 语义词法分析器谓词性能

    我有一个词法分析器为传递给词法分析器的宏字符串的动态列表创建 MACRO 标记 我在最顶层的词法分析器规则中使用了语义谓词来实现此功能 MACRO macros null tryMacro Where tryMacro 只是检查是否有任何宏
  • Antlr4中有哪些加速解析的方法?

    我对Antlr4的性能有些怀疑 我目前正在使用 Python 和 Antlr4 与 Java 相比 它非常慢 使用 Antlr4 IntelliJ 插件验证 由于我需要使用更大的代码进行解析 因此我计划切换到 Antlr 最快的语言 例如
  • ANTLR 嵌套函数

    ANTLR 适合这个项目吗 我正在寻找处理和转换用户输入的字符串 其中可能包含自定义函数 例如 用户可能会在字符串中写入类似 CAPITALIZE word 的内容 而我想执行 使用 StringUtils 在后台进行实际转换 我想用户有时
  • 使用 ANTLR3 解析换行符、EOF 作为语句结束标记

    我的问题是关于在 ANTLRWorks 中运行以下语法 INT 0 9 SEMICOLON NEWLINE r n n r STMTEND SEMICOLON NEWLINE NEWLINE statement STMTEND INT ST
  • Antlr 处理异常

    我使用 Antlr 3 和 AST 树开发了一个复杂的语法 ANTLR 生成词法分析器和解析器 问题是 例如 当用户输入无效的语法时 该语法需要 用户没有输入此内容 然后在我的 Eclipse IDE 中出现以下异常 line 1 24 m
  • 自动解析 PHP,将 PHP 代码与 HTML 分离

    我正在开发一个大型 PHP 代码库 我想将 PHP 代码与 HTML 和 JavaScript 分开 我需要对 PHP 代码进行多次自动搜索和替换 对 HTML 进行不同的搜索和替换 对 JS 进行不同的自动搜索和替换 有没有一个好的解析器
  • 摆脱令牌识别错误

    如何摆脱默认的 ANTLR 识别错误 我想使用我自己的错误类而不是 ANTLR 的错误来编写另一条消息 我的意思是是否有可能扩展某些 ANTLR 错误类以显示我自己的消息 更清楚地说 我不想在控制台中看到以下错误消息 令牌识别错误 如果您只
  • 使用 ANTLR 验证 LL(1) 语法

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

    我创建了一个文件MyLexer g4 inside myproject src main antlr com mypackage like lexer grammar MyLexer DIGIT 0 9 WS t r n gt skip 然

随机推荐

  • 如何检索 UITableView 的 UISwitch 行号?

    我已经尝试了此处发布的几种方法 但我无法让我的表充满开关来返回已更改开关的单元格的索引值 我正在以编程方式创建包含表的视图 无 xib TableSandboxAppDelegate m我实例化视图控制器didFinishLaunching
  • Eclipse android 项目不创建空白活动

    每次我创建一个新的 android 项目时 我都会指定要创建空白活动 我进入了我为其命名的页面 但是点击完成后 空白的Activity就找不到了 我知道我可以手动创建空白活动文件 但我想知道为什么 Eclipse 没有创建空白活动 即使它在
  • 传递父类作为参数?

    是否可以在创建实例之前不指定父类 例如像这样的东西 class SomeParentClass something class Child unspecifiedParentClass something instance Child So
  • php类中的回调函数

    由于某些原因 我们的托管公司使用 PHP 5 2 甚至没有预安装 mysqli 和 PDO 我别无选择 只能重写部分代码以使其兼容 5 2 所以 这是我的问题 在 PHP 5 2 中 不支持匿名函数 因此我做了以下测试以确保我正确更改了代码
  • iOS 使 UIImage 的一部分透明

    我有一个 UIImage 其中一部分已被用户选择清除 使其透明 为了进行选择 我使用了 NSBezierPath 如何在 iOS 中清除 使 UIImage 的部分透明 首先 我假设您有 UIBezierPath iOS 而不是 NSBez
  • PHP cURL HTTP 代码返回 0

    我不明白 当我 echo httpCode 时 我总是得到 0 当我将 html brand 更改为损坏的网址时 我期待 404 有什么我想念或不知道的吗 谢谢 check if url exist ch curl init curl se
  • 如何重新构建默认的“Launcher”应用程序?

    我的目标是修改Launcher应用程序并动态修改和更改主题 我在以下位置看到了几个 家庭 应用程序http www cyrket com p android com stain46 taghome 看来他们采用了默认的主页 启动器 并对其进
  • printf 中用星号填充?

    我已经搜索了高低 但在 C 中的 printf 中 似乎只有零填充和空白填充 我正在寻找自己的填充 在本例中使用星号 例如 假设宽度为8个字符 Input 123 Ouput 123 00 Input 3输出 3 00 我怎样才能做到这一点
  • Bash 中的嵌套函数调用

    现在 我正在尝试将一个 bash 函数调用嵌套在另一个函数调用中 以便一个函数的输出用作另一个函数的输入 是否可以像我在这里尝试那样在 bash 中嵌套函数调用 首先 我定义了这两个函数 returnSomething return 5 f
  • 使用ggplot2过度绘制分组箱线图中的平均点

    我有一个像这样的 ggplot2 分组箱线图 p lt qplot factor cyl mpg data mtcars geom boxplot fill factor gear 我想透支平均点 我试过这个 p stat summary
  • 如何在 iOS 中使用 3D 纹理?

    我找不到glTexImage3D OpenGL ES 2 0 中的 OpenGL 函数 那么如何使用 3D 纹理 例如 tga 文件 有人知道如何在 OpenGL ES 2 0 中使用 3D 纹理吗 OpenGL ES 1 x 和 2 x
  • 替换列表列表中的字符串

    我有一个字符串列表列表 例如 example string 1 a r ntest string string 1 test 2 another r ntest string 我想更换 r n 有一个空格 并去掉 在所有字符串的末尾 对于普
  • Haskell 库导入语法

    对于这个非常基本的问题抱歉 在 GHCi 中 两者之间有区别吗 import Library Name and m Library Name 它们看起来是等效的 但我认为使用替代语法是有原因的 你说得对import Module and m
  • 使用 XPath 和变量解析 lxml.html

    我有这个 HTML 片段 div h3 class toggle Table of Contents h3 div ul class toc li class level1 div class li a href section a div
  • JSP页面应该如何检查身份验证

    我是网络编程新手 我要求一种通用模式来执行诸如检查身份验证之类的操作 这是场景 该网站有一个供访问者登录的页面 它将获取用户名和加密密码并将其发送到服务器 然后从服务器获取错误代码 用户名 密码不匹配 或身份验证密钥 当用户登录成功时 我希
  • 当原始存储库不可用时,是否可以将默认存储库添加到 SLES?

    我有一个由不可用的人安装的 SLES 服务器 我查过 etc zypp repos d 有一个repo文件SUSE Linux Enterprise Server 11 SP4 11 4 4 1 109 repo 其内容是 SUSE Lin
  • Drive API 的 Google API OAuth 无法正常工作。出现错误:origin_mismatch

    我正在尝试运行 Google Drive 实时 API 的快速启动代码 我相信我做的一切都是对的 但我越来越 Error origin mismatch Request Details openid connect request true
  • 如何在 Mac OS X 上安装 libffi-dev

    我正在尝试在unix上实现micropython 这需要libffi dev 我是这样安装的brew install libffi dev 但好像没有找到libffi dev 有什么方法可以安装吗libffi dev在 Mac 操作系统上
  • 如何识别唯一用户?

    Question 如何确定用户是否是唯一的 我知道有很多方法可以使用 cookie 来执行此操作 但是不使用 cookie 的方法又如何呢 例如 转到城市词典并单击向上 向下投票按钮之一 即使您删除 cookie 并返回该页面 您也将无法对
  • ANTLRv4:非贪婪规则

    我正在阅读明确的 ANTLR4 参考文献 并对其中一个示例有疑问 第 76 页 STRING ESC fragment ESC 该规则与典型的 C 字符串匹配 包含在 其中可以包含 too 在我的预期中 规则STRING由于非贪婪构造 应该