草庐IT

ruby - 树顶语法无限循环

我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

ruby - Treetop 的 Vim 缩进文件(Ruby 解析器)

有没有人见过treetop的vim缩进文件?,Ruby解析器/生成器?我找到了一个vim语法高亮文件,但还没有看到用于缩进的文件。 最佳答案 看起来很简单——我只是创建一个文件~/.vim/indent/treetop.vim并使其唯一的内容runtime!indent/ruby.vim它似乎可以支持我所需要的一切。我认为它只是没有加载Ruby的缩进文件! 关于ruby-Treetop的Vim缩进文件(Ruby解析器),我们在StackOverflow上找到一个类似的问题:

ruby - 如何处理树顶左递归

我有一个grammarfile对于我正在尝试构建的一种新的通用编程语言。我正在努力使该语言健壮且易于使用(它深受Ruby等启发),为此我引入了一些左递归规则。我看到一些例子似乎表明了以下左递归规则:rulel_recursel_recurse/'somethingelse'end可以通过将其更改为非左递归:ruler_recurse'somethingelse'/r_recurseend对我来说,这看起来会有不同的问题并且仍然会失败。我是对的,还是这会“奏效”?我试图(查找和)消除的特定左递归可以在这个grammarfile中找到.我不确定哪些规则受到影响,但至少somewerepoi

ruby - 识别 Treetop 语法中的 Ruby 代码

我正在尝试使用Treetop解析ERB文件。我需要能够处理如下行:既然Treetop是用Ruby编写的,而你用Ruby编写Treetop语法,那么Treetop中是否已经有一些现有的方式可以说“嘿,在这里寻找Ruby代码,并给我它的分解”而我不必单独写出来规则来处理Ruby语言的所有部分?我正在寻找一种方法,在我的.treetop语法文件中,有类似的东西:ruleerb_tag""{defcontent...end}end其中ruby_code由Treetop提供的一些规则处理。编辑:someoneelse使用Ruby-lex解析了ERB,但我在尝试重现他所做的事情时遇到了错误。rle

ruby - 学习树顶

我正在尝试自学Ruby的Treetop语法生成器。我发现,不仅“最佳”文档的文档少得可怜,而且它似乎也不像我希望的那样直观地工作。在高层次上,我真的很喜欢比现场文档或视频更好的教程,如果有的话。在较低的层次上,这是一个我根本无法使用的语法:grammarSimpleTestrulenum(float/integer)endrulefloat((('+'/'-')?plain_digits'.'plain_digits)/(('+'/'-')?plain_digits('E'/'e')plain_digits)/(('+'/'-')?plain_digits'.')/(('+'/'-')

ruby - treetop 上最简单的规则不起作用

我有一个只有两条规则的树顶语法:grammarRCFAErulenum[0-9]+endruleidentifier[a-zA-Z][a-zA-Z]*endend我正在尝试解析简单的字符串(“A”和“5”)。如果我把那个规则放在第一位,“5”被识别为Num,如果我把那个规则放在第二位,则返回nil。类似地,如果我将该规则放在第一位,“A”将被识别为ID,如果我将该规则放在第二位,则返回nil。我无法理解这两条规则如何以任何方式重叠。这让我发疯!关于树顶或正则表达式,有什么我遗漏或不理解的地方吗?预先感谢您的帮助。 最佳答案 Tree