我对编写自定义语言不熟悉。在潜水到Flex之前,基于Bison的Lexers,Parsers,Compilers我想问一下,如果可能的话,在我开始研究之前可能会在一周工作之后,我会意识到这是不可能的。我的目标是创建简单的脚本语言,这种语言将被翻译成C语言而不是进一步编译,直到机器代码因为此代码进入嵌入式平台并且需要以与普通语言不同的方式进行编译。我的观点是做这样的事情:书面脚本 - > Parser根据规则将代码转换为C代码 - >编译嵌入式机器代码。
所以也许有人可以建议我这样做的方法。目前我正在阅读有关Flex& amp;基于野牛的自定义语言可以编译成机器代码,但我认为这不是我需要的。
答案 0 :(得分:3)
您可能会阅读一些有关域特定语言的文献,例如: DSL2011以及之前的会议记录。
不要过分关注lexing和解析。大多数工作和问题都在于定义语言语义和实现。
将DSL转换为C并非易事。例如,请参阅我的DSL2011 paper on MELT。
阅读一些关于语言语义和语用学的好书,例如:斯科特Programming Language Pragmatics。
另请阅读Garbage Collection Handbook(Jones,Hosking,Moss)。
最后,阅读C.Queinnec Lisp in Small Pieces的某些版本,其中特别涵盖了将动态类型语言翻译为C.
请注意,lexing和parsing是您工作中最容易的任务。
您是否考虑过嵌入一些现有的脚本语言,例如: lua,python或guile或使用现有虚拟机,例如Parrot或nekovm
不要忘记研究几种不同的域特定或脚本或编程语言。你需要知道的不止一个!
我强烈建议您以源代码形式免费提供您的实施。吸引用户使用新的DSL非常困难,提供免费实施可以降低障碍。