这可能是一个愚蠢的问题,它肯定需要一个地狱的词汇,但任何现存的编程语言都允许您这样做:
c# (1.2) {
// c# code
}
Perl (5) {
# perl code
c# (2.0) {
// some more c# code
}
}在单个源文件中使用多种语言?我正在为一种新的语言设计一种新的语言,并希望允许这样的语言(基本上是出于纯粹的懒惰,不想移植从网络、旧项目中复制和粘贴的片段,或者只是为了嘘嘘和咯咯笑)。
在我迄今为止的研究中,黑客攻击gcc的S中介语言似乎是一种很好的方式,可以用最少的精力将其转化为优化的机器代码,而词汇将是一个挑战(我一直在为language 再说一遍,懒惰,因为我不想要制作一个完整的IDE来为语言组装一个编辑器的模型玩一个IntelliJ插件,但已经在Backus的上下文无关性质上遇到了严格的限制--诺尔式语法符号),因此,似乎这将不得不采取另一种格式,因为我想在自己的语言中使用这些特性,而不考虑其他人--因此,在这个问题上的JetBrains教程大部分都是无用的。这也可能是一件好事,因为这是一个将语言定义抽象到某种程度的机会,其中包含了一种词汇和语言规范中的语法引导程序--例如,对于上面的伪代码,如下所示:
#require c#-1.2
#require Perl-5
#require c#-2.0在给定源文件的顶部或它的包含链(以我的新语言作为缺省值,以及构建新语法的语法和语法分析方法内置在其中以词汇方式引导整个过程。
无论如何,回到重点:像这样的东西已经存在了吗,我可以用它作为试金石吗?特别是在动态解析器和词汇方面(其中已经解析的代码可以显着地改变未来代码的解释-类似于为给定的上下文代码块。重新定义整个语言)。
发布于 2021-12-20 07:57:54
许多年前,Metrowerks有一个C/C++编译器。它根据文件的后缀以一种模式开始编译,如果它看到“#语用语言C”或“语用语言C++”,则切换到另一种语言。
例如,保留字的集合发生了变化,函数重载发生了变化。C代码可以在类以C++模式声明后使用它们,以及其他常识的更改。
https://softwareengineering.stackexchange.com/questions/371812
复制相似问题