Bison:在规则之后实现代码

Bison:在规则之后实现代码,bison,Bison,嘿,伙计们,我想问问在bison中实现了一种语言的人 完成所有规则后,实现代码端需要多长时间?我不知道我是否应该做这件事。目前我在600 LoC(计算%%的中间部分) 实现代码需要多长时间?我知道这会有所不同,但你花了多长时间来实施 需要几天吗?月?还是数月/数年? 如果是两个星期或更少,我可以去做。如果超过2个月,我就不会考虑它(至少在这一点上)。 只是要求估算一下。我还需要考虑备份代码。把语言转换成C++或C语言应该是微不足道的。不管怎样,我希望得到一个粗略的估计。如果我知道你的代码是什么样

嘿,伙计们,我想问问在bison中实现了一种语言的人

完成所有规则后,实现代码端需要多长时间?我不知道我是否应该做这件事。目前我在600 LoC(计算%%的中间部分)

实现代码需要多长时间?我知道这会有所不同,但你花了多长时间来实施

需要几天吗?月?还是数月/数年? 如果是两个星期或更少,我可以去做。如果超过2个月,我就不会考虑它(至少在这一点上)。
只是要求估算一下。我还需要考虑备份代码。把语言转换成C++或C语言应该是微不足道的。不管怎样,我希望得到一个粗略的估计。

如果我知道你的代码是什么样子的话,我可以给你一个更好的答案。考虑到它有600行(只针对野牛,不是flex?),我怀疑你能在两周内让它工作。到那时,你也许可以输入一些东西,但我怀疑你能否在一个月内“完全工作”。这主要是因为“这将需要更长的时间,因为这是你的第一次”和“你用一种语言写的第一件大事可能需要一个完整的重构,因为你没有设计好它来与这种语言一起工作。”


如果您将部分代码(从lexer开始)提交给我们查看,询问它是否是给定技术(AST、注释解析、字符串引用或转义等)的良好实现,在您开始在令牌上挂起代码之前,您可能能够将其降低到一个更易于管理的大小。

您对尝试实现的内容过于谨慎

但我要明确声明:如果您试图使用您引用的代理度量实现一种语言,并且您不是一个经验丰富的语言设计师(例如,至少有一个成功的、新颖的、工作的、可用的和使用过的实现),那么您就是在胡思乱想

你要么缺乏将简单的语言理念转化为恰当形式的经验,要么你的目标语言过于复杂,无法使用。也就是说,如果要让编译器理解它有那么困难,人类将永远无法理解它

我的建议是:停下来,退一步,重新思考你想要实现什么,探索其他实现,看看你是否真的有其他语言无法表达的东西。如果你已经做了所有的功课,并且发现你仍然想要建立你的语言,至少你会有以前没有过的观点


语言设计很难做好。

这个问题完全取决于语法的语义。我发现即使是复杂程度达到C级的语言,600的数量也相对较高。我怀疑您没有生成有效的中间表示。对于定义不好的语言,即使是定义良好的bison语法也很容易>1KLoC,我想。@ MSW:它与C++相符合,但是计数包括空白,因为我没有其他方法来计算行,而不是用手。LITB:这就是为什么我想从PPL中知道的人。似乎我只需要一些主要函数,其余的只是以不同的方式/语法格式化参数以调用所述主要函数。我说不出时间长不长。此外,还有很多空格+1,lexer也是一个野兽。240行ATM你对lexer的尺寸有什么意见吗?再说一遍,我不能不知道你想做什么。一个SQL的词汇表可以从所有关键字中得到很大的。语言是我自己类似于C++的。它有模板,操作符重载C++所有的,但是不同的语法(0个冲突,需要不同的语法来做)和一些新的特性。然后我打赌两个月,再加上你学习AST和RTL的时间。您可能能够在几周内运行一些基本的程序,这些程序可以处理一些输入文件,但是您的大多数代码都需要处理输入错误以及如何优雅地处理它们。这需要很长时间,因为总是有一些情况下你忘记了用户会发现。即使你所做的一切都是C++或C语言(谨防内部平台效果和轮的重新发明),你仍然需要捕捉所有的东西并确保你的输出是错误的。这很好,而且所有的规则都已经完成了,我只是想知道我是否应该跳槽并实现代码,还是只保留语法。我尝试了一个简单的版本,只是为了理解如何正确地实现。一开始我就有很多核心问题。我现在明白了。但无论如何,我想知道这是否可以在一个月内完成(而不是2周)。如果你不告诉我们语言,或者暗示语言,我们就没有什么。它自己的类似于C++。它具有模板,运算符重载C++的所有内容,但语法不同(0个冲突。需要不同的语法来完成)和一些新的特性。