我正在尝试解析可能多次看到该模式的文件:
G04 hello world*
G04 foo bar*
对应的 PEG.js 语法为:
= "G04" _ content:String* _ EOL
{
return content
}
_ "whitespace"
= [ \t\n\r]*
String
= value:[a-zA-Z0-9.(): _-]+
{
return value.join('')
}
EOL
= [*] _
预期行为:
我希望 PEG.js 为每个G04
行生成一个 2 项数组。
实际行为:
抛出以下错误:
第 2 行第 1 列:预期输入结束,但找到“G”。
请阅读 peg 示例语法。 这里没有错误。 问题跟踪器不适用于帮助请求。 示例语法之一正是您所要求的。
帮助请求的适当位置是 StackOverflow。 问题跟踪器是开发人员用来跟踪损坏的地方,以及包存储库用来衡量项目质量的工具。
Document
= ClassRow+
ClassID
= "G04"
ClassTitle
= title:[^\n]+ { return title.join(''); }
ClassRow =
id:ClassID title:ClassTitle '\n'? { return { id, title }; }
一旦你看到这个,请关闭这个问题。 谢谢。
关键是要学会阅读 PEG 语法。 说的是:
Document
是一个或多个ClassRow
。”ClassID
是固定字符串"G04"
。”ClassTitle
是直到下一个换行符但不包括下一个换行符的任何文本。您将称其为“标题”。将标题作为字符串返回,而不是字符数组。”ClassRow
是ClassID
后跟ClassRow
。因为 ClassRow 以换行符结束,所以换行符有效地开始新行。
我将使用 StackOverflow 来解决我的其他问题,感谢您的回答和解释。
但是,有一些事情我想表达:
examples/
文件夹中看到 4 个示例语法。 但是,恕我直言,除了“arithmetics.pegjs”之外,它们都不适合(足够简单)初学者(像我或我)。 我知道 PEG.js 正在(重载?)开发中,因此您可能更专注于复杂的现实世界问题/场景是可以理解的。 我只是期望从简单到复杂语法的逐步示例。请将此视为新人反馈。
“问题类型:问题:[是/否]”部分对您提到的指令有点误导。 我将该部分解释为“问题跟踪器是提出问题的正确位置”
我同意。 我想删除该文本,并在 2017 年提出要求。
之所以有文本,是因为不再运行这个库的 David 厌倦了人们说“这是一个错误”而不查看问题并找到另一个认为存在错误的人,并且没有
例如,这个问题有六个克隆
.
“示例”:我可以在示例/文件夹中看到 4 个示例语法。 但是,恕我直言,除了“arithmetics.pegjs”之外,它们都不适合(足够简单)初学者(像我或我)。
我同意。 我想写很多。
.
我知道 PEG.js 正在(重度?)开发中
肯定不是。
原作者让它闲置了一年,所以他要求新的维护者。
2017 年 5 月接任的新维护者尚未向 master 分支发布一个字节的代码。
我已经开始鼓动收购的过程,因为该库的使用量正在下降,该库从 2014 年开始不支持 javascript,近三年来 NPM 上没有readme
,单字符 AST 修复是一年的问题没有得到答复,新的维护者决定放弃他标记为关闭大量问题的 2.5 年的功能分支,并用他自己用不同语言编写的新内容替换整个库
.
您可能更专注于复杂的现实世界问题/场景,这是可以理解的。 我只是期望从简单到复杂语法的逐步示例。
我相信,在让这个库再次恢复健康之后,用户入职可能是目前最重要的现实世界问题
为了清楚起见,我不是原作者。 @dmajda是。
为了清楚起见,我不是维护者。 没有维护者。
“问题类型:问题:[是/否]”部分对您提到的指令有点误导。 我将该部分解释为“问题跟踪器是提出问题的正确位置”
@ceremcem ,你做的一切都是对的(除了你没有在维基百科上查看 PEG 的描述,也没有尝试手动解析你的语法,之后你的问题,恕我直言,将得到解决)。 您无法知道您的问题只是一个问题或对库中错误的描述。 这只能由开发商决定。 因此,没有规定GitHub 只针对 bug 。 即使在非洲,问题也是问题
一般来说,问题跟踪器用于问题,而不是问题
ceremcem 在 stackoverflow 上会在几个小时内得到答案。 在这里,他等了九天,如果我不说出来,我想他不会得到答案。
一年或更长时间后,许多类似的问题在这里都没有得到解答。 有六个八岁。
.
您无法知道您的问题只是一个问题或对库中错误的描述。
是的,他可以。 他在问“我该怎么做?”
除非他认为解析器不能做到这一点,否则这绝不是错误。
它基本上是解析器中最简单的东西,我相信peg
仍然是使用最频繁的 javascript 解析器,尽管这很快就不再是真的了,而且他似乎很聪明,所以我不认为他认为解析器生成器不能多次使用规则
为了他的最大利益,最好将他引导到专为问题设计的资源,而不是图书馆维修,特别是如果问题资源是一个非常活跃的资源,并且图书馆维修资源刚刚宣布它将终止三年的工作并且通常会忽略这样的问题
直到我开始给人们贴标签之前,这个问题没有得到答复,这不是巧合,到目前为止还有六个其他问题
没有做出任何决定。 我在给他建议。
另外,我回答了他的问题。
在 StackOverflow 中,我通常会在几个小时内得到答案,所以我是它的常客。 但是,我的 SO question没有任何活动,所以我来这里问。 基本上,响应时间几乎相同。
我已经看到了问题跟踪器使用的每种组合:
没有一个最佳选择(没有一个适合所有情况),但我确实喜欢对所有事情都使用问题跟踪器。
您无法知道您的问题只是一个问题或对库中错误的描述。
我们已经多次在 FreeCAD_Assembly3 库上看到过这种情况。 我的许多简单、愚蠢的问题都揭示了一个或多个错误。 这发生了,我看到了。
我同意。 我想写很多。
我喜欢你对这个图书馆的态度。 你似乎很在乎。
所以我认为他不相信解析器生成器不能多次使用规则
正确的。 我的意图不是错误报告。 我只是没有找到为多行重用相同规则的方法。
但是,我的 SO 问题没有任何活动,所以我来这里问。
哦,伙计,那里的钉子社区也死了吗?
好难过☹️
好的,如果你已经发了一个 SO 帖子,那么到那时你来这里是 100% 正确的
.
我已经看到了问题跟踪器使用的每种组合:
是的,人们总是违反社区规范
.
我同意。 我想写很多。
我喜欢你对这个图书馆的态度。 你似乎很在乎。
非常。 我想参与2017年的所有权转换,但是有人给出了一个17个主要版本的计划,老所有者相信他们
三年后,那个人放弃了他们的第一个小版本。
事实是公共软件真的很难写。 几乎我认识的每个人,包括我自己,都倾向于说“在 X、Y 和 Z 完成之前,这个版本还没有准备好”。
然后当 Y 完成时,你意识到你还需要 V 和 W。
然后当 Z 完成时,你意识到你还需要 S、T 和 U。
然后当 V 完成...
这就是0.11.0
在 2017 年开始使用六个功能的方式,并在 2020 年因跟踪器中错误标记为关闭的一百个合并而死亡
公共软件的一部分规则是频繁的小版本发布。 这一直是 peg 的一个问题,但软件的质量如此之高,以至于我们还是忍受了它。
然后 dmajda 离开了,一切都停止了。
我们耐心地等待了很长时间。
但是新来的人现在把它称为他的爱好项目,并说他放弃了整个事情,转而支持他写的一些新的和不相容的东西。 而且即使它有相同的 AST 和相同的功能集等等,它背后也不会有十年的社区调试,我也无法切换
你知道,如果他想写一个新的、更强大的 PEG 解析器,很好,很好,继续。
但是他不会通过假装自己是维护者然后从不维护,然后接管这个人的图书馆社区和职位,并将他自己的永远不会发布的软件取而代之来杀死这个人
是时候让一个健康的过程重新开始了。 新的维护者建立了一个由初级开发人员组成的微型社区,他们实际上是在提倡让这个库死掉而不是拯救它
很明显,急需改变
.
我只是没有找到为多行重用相同规则的方法。
如果您再次找不到答案,请随时标记我
也就是说,通常我会在谷歌上搜索示例,并且因为这个库曾经非常受欢迎并且被大量使用(如果当前的图书馆凶手只是在替补席上腾出空间让另一个人帮助,那么可能会再次出现),有足够多的例子在那里覆盖你需要找到的东西
不过,一般来说,我希望有人在我新手时告诉我的是我在“关键是要学会阅读 PEG 语法”的评论下所说的话
一旦你学会阅读那种讨论形式的 PEG 语法,思考它们也变得非常容易,到那时它们突然变得非常容易编写
这就像一个电灯开关。 没有坡道。 直接从不可能到容易
这就像一个电灯开关。 没有坡道。 直接从不可能到容易
你鼓励了我! :) 所以当我只能看到一些“胡言乱语”的规则集时,我不应该感到如此愚蠢 :)
如果您再次找不到答案,请随时标记我
我不想滥用这个,所以如果值得询问或者我应该多搜索一下网络,每次都会很难打电话。 这是一个慷慨的提议,谢谢。
很明显,急需改变
我看到您在 fork 中启用了“问题”部分。 当你只是一名乘客时,这总是一个好兆头,试图通过冲进驾驶舱来驾驶一架客机。 这是好事。
如果有活水源,不管你在路上放什么,它总能找到流动的方式。 如果没有流动,因为它的源头被排干了,那就没有办法了。 源头就是需求。 你的态度表明水的源头非常活跃。
所以我很好奇,你为什么不接手? 这就是我为加载条库所做的。 我意识到开发停滞不前,所以我从自己的问题开始着手解决问题,并为每个分支创建拉取请求。 过了一段时间,原作者决定继续他的工作,我们就可以走了。 您认为这是一个可行的解决方案吗?
你鼓励了我! :)
我很高兴。
.
这就像一个电灯开关。 没有坡道。 直接从不可能到容易
所以当我只能看到一些“胡言乱语”的规则集时,我不应该感到如此愚蠢:)
不。 解析器是“这很荒谬,然后突然变得很容易”的极端案例。
这是踢球者 - 相对而言,钉住很容易。 其他的往往只是残酷的。
在我看来,学习peg有四大问题。
我一直在考虑制作一些视频教程。 我相信他们会让这_far_更容易理解。
.
我不想滥用这个,所以如果值得问的话,每次都很难打电话
一周一次就好了。 了解我有时反应迟钝
.
我看到您在 fork 中启用了“问题”部分。 当你只是一名乘客时,这总是一个好兆头,试图通过冲进驾驶舱来驾驶一架客机。 这是好事。
我几乎没有开始。 首先我想看看真正的回购是否可以被拯救
从叉子上做这件事会更加困难。 我会丢失所有 PR 和所有交叉引用,以及所有关闭的未合并或关闭的已删除材料,其中一些非常有价值
.
所以我很好奇,你为什么不接手?
我想。
此时,相关的密码和身份验证都在一个人的手中,他们还没有回应。
走着瞧。
.
我意识到开发停滞不前,所以我接手解决问题,从我自己的问题开始,并为每个分支创建拉取请求
这是一个特殊情况
发布的是0.10.0
新的维护者允许0.11.0
分支在三年内无限增长,然后决定取消它,转而支持他从零开始单独编写的0.12.0
没有什么可以放 PR 的。 npm
中的内容来自 2017 年,新维护者下github
中的内容在三年后被取消而从未发布
.
过了一段时间,原作者决定继续他的工作,我们就可以走了。 您认为这是一个可行的解决方案吗?
如果替换维护者愿意允许,这大致正是我想要的。
我有点怀疑大卫会回来,但如果他回来了,那就太棒了
因此,我想再次把它变成一个标准的开源项目
您认为这里最重要的 3 个问题是什么?
我认为说对我来说最重要的问题有点危险,因为这里有相当多的人比我在peg
拥有更多的经验,如果他们说“实际上是另一回事, “我很可能会听。
为此,我想提醒一下,虽然我很高兴在这里进行开发,但我在这里的兴趣是作为维护者。
这是,我认为,很多人没有得到的东西:开发和维护编码真的,真的不同。
Development coding
想要大的新想法、新功能、新的华而不实的想法。Maintenance coding
想要在小问题聚合并使某些好的东西无法使用之前解决它们。我很高兴做一些开发编码——也许甚至期待一些——但这里还有其他人更适合它。 因此,我想明确表示:我的实际目标是让他们能够再次贡献 PR,就像他们过去一样。
也就是说,为了表明我的个人观点:
peg.js
绝对不能再有魔法分支。 这就像他妈的一环。 这听起来很棒而且很强大,但它不是该死的工作,最后,你是咕噜。 这不是svn
。 在史蒂夫鲍尔默的声音中, feature branches
、 feature branches
、 feature branches
、 feature branches
。
版本应该是功能的结果,而不是功能计划的收集点。 我们不是一家 1980 年代的公司,我们不应该像一个那样做计划。
唯一应该同时使用多个功能的情况是在不可避免的情况下,例如修补功能以应对外部升级,或者真正无法分开的事情。 哦,你认为这与另一个功能有关吗? 太好了,把它放在2.31.0
中,我们需要把2.29.0
拿出来,而那边的其他东西很可能是30
。
人们一直把未成年人当作专业人士对待。 这就是未成年人从未出现过的原因:它被挂在与专业相同的行为陷阱上。 只是不要他妈的这样做™。
再具体一点,
0.12.0
,还有0.13.0
- 请注意我并没有说其中的内容,而且我认为这无关紧要 - 那么我们会在1.0.0
上实战peg
不仅活起来,而且开花每个人都在谈论这个,但我的爱好有限状态机目前有 3500 个单元测试和 100% 的文档覆盖率,所以,请认真对待我。
我真的非常相信测试。
我编写的另一个库是状态机的一半大小,复杂度显着降低。 对状态机进行全面的语言更改比对网络处理程序进行小的更改要容易得多,因为网络处理程序的测试很差,你必须付出真正的努力来确保某些事情是正确的。
密克罗尼西亚联邦? 不,测试很棒,他们会抓住你
每次我接触到它们中的任何一个时,这种特定的对比都会以残酷的清晰提醒我,测试对于至少对我来说是值得信赖的东西实际上是多么重要。
我认为在peg.js
上工作的很大一部分问题在于测试和文档是一团糟。 我认为是时候改变了。
peg
在这方面面临四个问题peg
是一个非常早期的javascript
库,它在社区规范存在之前做出了一大堆基本选择。 事实上,几个社区的规范都是因为大卫; 在挂钩之前,很多人认为多包装很难,所以现在在这方面的开拓者之一在同一方面有问题地落后,这有点令人心碎。 话虽如此,除了大卫提前做对的出色事情之外,他做错了一些事情,而当时一些正确的事情已经不复存在了。 许多小的更改将导致开发人员体验发生根本性的变化。node
项目应该有某些工作方式。 这包括生成针对浏览器的输出,因此,节点项目显然是正确的现代工作方式README
的位置是一项重大的学习挑战。 三年后,当前的维护者仍然没有成功(!),最后两个版本的原始开发者也没有peg
既是极端自动化的受益者,也是受害者。dmajda
很可能无法达到他所做的那样。 我当然不能对我的东西。repl
现在几乎可以使用十年了。 如果“哦闪亮”被视为危险信号,其他一切都可以。gh pages
和gh actions
中,并且永远保持孤独npm
readme
$ 或合并es6 modules
,一次持续三年。0.12.0
rebake 中,模块 yarn stuff 中的模块之类的东西就会出来。 David 的构建材料自 2011 年以来一直有效。2018 年的新东西已经在 2020 年被打破。没有更多的业余技术。但你会注意到这些实际上都不是关于软件本身的
我不认为这里的软件是问题
我认为这个过程是,在较小程度上,项目
如果@futagoza允许,这些就是我要解决的问题
如果我们放下骄傲,选择图书馆的大型社区需求而不是我们的爱好项目兴趣,这个图书馆可以在 30 天内恢复生机
让爱好重写成为叉子
让维护者开始维护
@StoneCypher我喜欢你的能量 :-) 我过去(在 dmajda 时代)曾经使用过 pegjs,我非常喜欢它。
只是叉它,不要打架。 事情可以而且会在以后安定下来。 如果社区跟随你,那么你就不需要关心现有的“钥匙持有人”或类似的东西。 建立声誉需要时间,但也是必要的。 不要再浪费时间争论了。
八,你的叉子会在未来的某个时候让它“回到原点”,否则它就会有自己的生命。 这两个选项都是有效且良好的 IMO。
请用“做一个叉子”的废话来阻止它。 其中有四个,你不知道它们是什么。 分叉不会保存任何现有的下游消费者,不会保存 PR,不会保存问题,不会承载社区,也不会可见。
人们已经尝试了三年。 这是行不通的。
不要继续提供此建议。
@futagoza - 每个人都放弃了你做正确的事。 五个人告诉我分叉图书馆,因为他们希望你拒绝修复,并保持对你正在杀死的图书馆的控制。
我相信他们期望的原因是,我发现有十几个人为你提供帮助,帮助你完成你承诺但从未做过的事情,而每次你说“不,我很快就会去做。 "
做你应该在 2018 年做的事,把维护交给真正会维护项目的人。 停止杀死这个图书馆,停止杀死这个社区,并让开。
@StoneCypher John,当我建议创建一个分叉时,我是认真的。 分叉一个项目是开源给你的一个很好的选择,特别是如果你觉得它需要改变或者它正在死去。 不,我没有任何问题,你不需要写信给我 DM 只是为了问我这个问题。
当我说“不要再给出这个建议”时,我也是认真的。
我喜欢这次谈话。
@StoneCypher我在这里不同意你的观点,因为我看到的正好相反:
realthunder
决定解决这个问题。 他需要改变一些核心属性来达到目的,这反过来又使他的分叉与主流分支不兼容。 他失去了所有用户,几乎所有社区。 除了少数人,他没有支持者(这是我所看到的)。 据我了解,他也没有活跃用户。最近,他的 PR 开始被审查。 经过大量的工作,他的分支终于和主流兼容了。 在下一个版本中,我相信他的分支会并入主流。
与此同时,出现了严重的财务问题。 他是唯一的维护者,少数用户的捐赠无法让他生存。 我决定在土耳其这里教授 FreeCAD/Assembly3,并出售支持以支持财务。 我向他求婚,这被接受了。 我提出了所有必要的申请,以成为一个享有盛誉的基金会的培训师,最近被接受了。
有时 1 人足以生火。
并让开
不同意。 让他们留在路上。 好的动机总会找到出路。 如果不能,那是因为它没有那么好。
我明确而明确地没有收集有关此主题的建议。
这个图书馆需要复活。 如果我没有充分解释,我很抱歉,但我收到的回复未能解决提出的任何实际问题。
人们的生活和工作都依赖于此。