context-free-grammar - 可能的错误:这个流氓语法规则的含义是什么?
问题描述
所以我正在努力将语法重写为相同语法的其他形式,并且正在使用函数grammar2rascal(g),但是在尝试写回跟随/之前的限制时它会产生一个(在我看来)奇怪的结果。我想知道是否有人可以向我解释这意味着什么以及为什么流氓会这样工作。我假设流氓在内部重写了一些东西,因此想出了这个,但是我仍然想了解它的含义和用途。
所以这里是:
lexical Id = "a" !<< [a-z]+ !>> "b";
变成:
lex("Id"){prod(lex("Id"),[conditional(iter(\char-class([range(97,122)])),{\not-follow(lit("b")),\not-precede(lit("a"))})],{})}
这看起来不错,但写回:
lexical Id = [a-z]+ !>> "b" !<< [a-z]+ !>> "b";
这完全删除了规则中前面没有“a”的部分。那么我错过了什么还是这是某种错误?
解决方案
查看代码grammar2rascal
有一个错误precede
处理错误。这是在1c7fed中修复的,这应该会在大约一个小时(欧洲中部时间 16:00)出现在不稳定的更新站点上。
事实上,现在它打印出来了,正如您所期望的那样:
lexical Id = "a" !<< [a-z]+ !>> "b";
推荐阅读
- python - python TypeError:'int'对象不支持项目分配python
- reactjs - 关键依赖:一个依赖的请求是一个表达式,@ts-morph/common/dist/typescript.js npx create-react-app
- next.js - Google 授权错误 - 提供 Client_Id 以某种方式“无效” - 为什么?
- .net - .NET Core SDK 不提供编译器吗?
- mysql - Laravel 基于列查询数据
- winforms - DataSource 控件在使用 Visual Studio 2019 的 .NET Windows 窗体应用程序中不可用
- python - tricontourf中的Python matplotlib对数颜色条
- arrays - react native - 如何在元组数组中使用 React Hooks?
- typescript - 在 Typescript 中强制不可变返回
- python-3.x - 如果在 python 代码中没有声明种子值会发生什么?