高级项目实施的语言好吗?

时间:2011-09-10 23:53:03

标签: language-design compiler-construction

这是我上一学期的大学,我必须在12月做一个大的演讲。我计划设计一种不仅可以工作的小语言,而且还有一些漂亮的功能。有没有人有任何有趣的语法想法或功能会给我的教授留下深刻的印象?

注意:我不想只复制一种语言并重新实现它。我希望做一些研究并尝试一些新想法。

4 个答案:

答案 0 :(得分:5)

我有一个疯狂的想法。

有编译器可以编译编译器。这本身就很有趣。 您可以在MetaII风格中实现一个(阅读其他SO答案: Are there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers?

使学生项目成为可行的原因是MetaII编译器非常小,并且 技术论文(阅读其他答案)包含您需要的所有内容,共10页 除了你提供的一些汗水。这很合适 在你有空的时间框架内(这对学生来说很坦白) 只是坐下来自己敲打编译器。)

MetaII自己对自身的描述非常简洁:只有大约50行(!)。

既然它可以自行编译,它可以编译自己的增强版本......所以 你可以用它来引导更复杂的编译器。通常,那就是 大多数人都想采取这种方向,因为MetaII本身就相当简单。

这是一个疯狂的想法:您还可以使用它来编译较少版本的自身。 问题是,你能拿走多少,并且仍然可以爬回来 元编译器阶梯?你可以构建一个多小的编译器仍然可引导?

我知道MetaII有2个项目是可移动的,因为我已经完成了 这是在遥远的过去。我不打算告诉你他们是什么 破坏了发现过程。但它在学生项目中的表现很好 在已经知道可行的事情上,所以你不要走下小巷 有真正的死胡同。

很久以前我认识的其中一个人非常认真地试图这样做。他的目标是将其缩减为一小段字符......将其视为“编译器DNA”。

答案 1 :(得分:1)

虽然我可能无法直接回答您的问题,但我相信这会从您自己的经验中获得一些见解 - 鉴于,在最后一年的项目中,我还尝试了自己的脚本语言(使用C ++) - 尽管我我知道你正在尝试编译器,所以可能没有相似之处。请从我的错误中吸取教训。

根据经验:

  1. 你想象的脚本语言会做什么(你输入一个命令,做一些漂亮的东西,比如修复windows或者别的东西)和它实际上做了什么(你输入一个命令,但几分钟后崩溃)可以通常是两件不同的事情。保持现实。

  2. 除了大脑想象这个梦幻般的成品(没有中间),它还有一种倾向于欺骗自己的能力(就像'其他程序员犯了这个错误,但我不会!')。你有可能犯同样的错误,或者如果不相同,也会犯同样的错误。

  3. 大脑评估所需时间的能力很差(如果它认为'这只是一个需要一个月的黑客工作' - 再想一想),而且它认为需要的时间应该乘以5到5之间10次​​(如果不是更多)以准确了解所需的实际范围。保持范围的漫长结束 - 更糟糕的情况。

  4. 出乎意料的陷阱。就像'我如何实现多先验逻辑语句'和'它花费的时间比我预期的要长(见3.)'。愿意放弃复杂的事情。

  5. 设计。不要只是寻找想法,考虑它是否是一个可行的项目,并看看你如何在跳到复杂的东西之前实现基础工作(见1.)。尽早奠定基础可以节省您的时间。不要忘记设计文件。

  6. 研究。有可能你打算写出来的功能,已经在某个地方写过了。研究它。这将节省您的时间。不要重新发明轮子,不要担心效率(大学就是学习)。

  7. 正如一位评论者所说,开始简单,让它运作,然后扩展。

  8. 开发有用的想法的最佳方法是查看某些任务或某些脚本语言真正困扰您的内容,并构建它以便您可以消除或最小化该任务。例如,我不得不继续从网站下载文件并手动将其分类到特定的文件夹 - 所以我建立了一个程序来为我做这件事。

答案 2 :(得分:0)

不要为这么小的项目做一般用途。找到您希望能够为日常问题编制解决方案的利基。在我的脑海中,您选择的X11窗口管理器中窗口放置的约束语言怎么样?

答案 3 :(得分:0)

如果您只是希望获得乐趣,那么您应该尝试创建自己的“深奥语言”。 'Brainf ** k'有点在社区中取得了模因(如果我没错)

http://en.wikipedia.org/wiki/Esoteric_programming_language