Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在任何编译语言中实现以下语法(对于工厂设计模式)?最好是Kotlin,C++_C++_Compiler Construction_Factory Pattern_Kotlin Native - Fatal编程技术网

在任何编译语言中实现以下语法(对于工厂设计模式)?最好是Kotlin,C++

在任何编译语言中实现以下语法(对于工厂设计模式)?最好是Kotlin,C++,c++,compiler-construction,factory-pattern,kotlin-native,C++,Compiler Construction,Factory Pattern,Kotlin Native,我想知道下面的语法是否适用于编译语言? 请不要提供java,因为它需要JVM。该设计相当于工厂设计模式,因为我们初始化一个类,一旦一些测试通过,在正常情况下,我们使用大量if-else语句,即当我们有一系列的类,即10个类时,代码变得笨拙 我正在尝试创建一种语言,它没有被决定,而是将研究已经编译的语言的特征能力,这些语言目前与KOTLIN母语一起使用,LLVM还没有排序LLVM集成。 甲级{ } B类扩展了A类{ } C类扩展了{ } 类D扩展了{ } 类E扩展了{ } 类F扩展了A{ } 类

我想知道下面的语法是否适用于编译语言? 请不要提供java,因为它需要JVM。该设计相当于工厂设计模式,因为我们初始化一个类,一旦一些测试通过,在正常情况下,我们使用大量if-else语句,即当我们有一系列的类,即10个类时,代码变得笨拙 我正在尝试创建一种语言,它没有被决定,而是将研究已经编译的语言的特征能力,这些语言目前与KOTLIN母语一起使用,LLVM还没有排序LLVM集成。 甲级{ } B类扩展了A类{ } C类扩展了{ } 类D扩展了{ } 类E扩展了{ } 类F扩展了A{ } 类G扩展了A{ } 类H扩展了A{ } 第一类扩展了{ } 类J扩展了A{ } 类K扩展了{ } 函数getClasstest{ iftest==1{ 返回新的B }如果test==2,则为else{ 返回新的C }否则,如果测试==3{ 返回新的D }否则,如果测试==4{ 返回新的E }否则,如果测试==5{ 返回新的F }否则,如果测试==6{ 返回新的G }否则,如果测试==7{ 返回新的H }否则,如果测试==8{ 返回新的I }否则,如果测试==9{ 返回新的J }否则,如果测试==10{ 返回新的K } } 让klass=getClass10
console.log`Found class${klass.constructor.name}`你能澄清你的问题吗?你之前的问题对我来说似乎更清楚。你能告诉我们你想要达到什么样的高层次目标吗

你在尝试设计一种新的语言吗?您是否正在尝试选择一种语言来实现新语言的解析器

根据您的代码,您正在尝试设计一种语言,其中类按声明顺序保存为列表,然后您希望能够通过某种方式迭代列表来实例化所有这些类,并且这些类应该能够知道它们自己在列表中的索引以供其他使用

这就是你想做的吗

在大多数语言中,类不能保存在数组中。它们不是真实的物体。但是有些,比如SimultTalk,Objto-C,Soad或TAD,隐式地为每个包含额外数据的类创建一个对象,C++有一个被称为运行时类型信息的萎缩形式,或者RTTI。 如果您的实现语言不能做到这一点,那么您必须自己做到这一点。创建包含函数的对象,该函数创建正确子类的对象,并且可能包含一些其他信息,如列表中的类名或索引,以便您可以再次找到它,并将该maker对象添加到全局列表中。然后使用工厂对象的全局列表来创建实例

但你并不是在说你是如何创造你的语言的。您是否正在编写一个工具,用您的语言读取文本文件并将其转换为现有语言的源文件?然后,该工具只需为几个额外的类创建源代码,例如,对于类B,它还将创建一个类B_Maker,它是类a_Maker的子类,但会创建一个类型为B的新对象,然后它将创建一些包含代码的init函数来创建每个Maker的新对象,并将它们添加到全局列表中

如果您正在修改LLVM或其他现有的编译器链,或者尝试从头开始执行此操作,基本方法将是相同的,除非每个类已经有一个可以扩展的现有对象,但您不会生成源代码,但是其他一些数据结构最终会导致编译等效代码


给我们更多的上下文,我们可能会提供帮助。

你知道Kotlin是一种基于JVM的语言吗?至于语法分析,任何语法,你都可以使用几乎任何图灵完整语言。@你知道有Kotlin native吗??我知道kotlin有一个jvm,但它也有CinterOp。你想实现什么?您是否正在尝试用其他语言实现该模式?那是什么语言?为什么有编译器构造标记?您正在尝试自己创建编译器吗?请花一些时间刷新,以及。我已经删除了编译器标记。正如你所看到的,这个问题由于某种原因被搁置,不得不重新思考这个问题。因此,这里我问是否有任何语言能够用于该结构,是的,我考虑过使用它们的静态持有者创建类,即类A将其静态作为非静态,这就是数组中实例化的内容让Klass=[new BStatic]是的,我试图实现我自己的语言,我也想在我的代码中使用这个结构,并且还想翻译成支持结构的任何语言,如果不是,我会考虑使用类BSTATE结构。
你重新思考这个问题是件好事,但如果能提供更多的信息而不是更少的信息,那会很有帮助。请给我们提供更多关于您如何创建自己的语言的详细信息,并将其包含在您的原始问题中。从这个评论,我认为你是在建造一个运输机?用您的语言获取源文件并将其转换为Java源文件的东西,而不是输出本机代码的编译器?在你的问题中添加这样的细节。我们不能读懂你的心思,所以我们不能用明智的方式回答你的问题。你的问题应该包括:1。你想干什么?e、 我正在尝试建立一种注册我的控件类的更简单的方法,以便在从文件或其他东西加载时创建正确的控件类。你打算怎么做?e、 我正在构建自己的领域特定语言,该语言将被翻译成Java源代码3。你的限制是什么?e、 我运行的是Raspberry Pi,否则使用该系统的人将是具有财务和HTML知识的非程序员。。。给我们一些可以使用的东西。只是想知道该功能是否在任何语言中实现,因为它对于我个人的factory设计模式语法来说是一个很好的语法,而不是必须使用不整洁的if语句创建整个factory类,对于语言设计来说也是一个很广的范围,并且必须将其分解为一个部分,即if该语法可用于javascript以外的任何其他语言。因为我使用KTLLN本地,我可以将它集成在一起,无论是在C++或KTLLIN本地。