如果我为单核处理器编译,什么时候使用循环裂变/分布有意义?性能方面?不,它几乎肯定会引入开销 性能方面?不,它几乎肯定会引入开销 有关标准答案,请参阅comp.compilers
除此之外,我可能会想到一个奇怪的情况,如果有一个潜在的迭代可能会阻塞。(例如,动态内存分配)
请注意,这种情况更多的是“滥用”一种简单的语言“并行”,而不是真正的数字原因。(使用“for”比使用线程手动执行更容易,即使for等待所有线程完成)有关标准答案,请参阅comp.compilers
除此之外,我可能会想到一个奇
通用编译器的最大可接受渐近运行时间是多少?
澄清一下:编译过程本身的复杂性,而不是编译程序的复杂性。例如,根据程序大小,源代码字符、语句、变量、过程、基本块、中间语言指令、汇编指令或其他指令的数量
这在很大程度上取决于您的观点,因此这是一个社区wiki
从编写编译器的人的角度来看这一点。当其中一个优化为O(n^6)时,优化级别-O4是否会用于较大的程序
相关问题:
什么时候(指数复杂性甚至不可计算)是可以接受的
什么是可以接受的?它必须是线性的吗
现有编译器的复杂性是什么?GCC?风险投资?英
我是LLVM新手,需要分析程序(控制流和数据流分析)。我在LLVM中找不到PDG或任务图。如何实现这一点?如果您查看此链接:(在调试代码时查看图形”部分),它介绍了如何使用graphviz生成和查看图形。这对于交互式使用以及创建用于发布的图形都很有用。您可以使用此工具在LLVM中构建过程间程序依赖关系图:
此处提供了详细的程序(请注意,您必须下载LLVM 9.0.0才能使其正常工作,从,根据您的首选平台进行选择):
其中的示例hello.c如下所示:
#include <stdio.h&
我正在上这门计算机编程课,我对教授给我的指导感到困惑,因为我有一台Mac电脑,而我甚至没有一台Emacs,所以我最终下载了AquaMac电脑。我知道如何“找到”一个文件,给它一个名字并保存它,但我不知道如何。。。编译它?。。使用macbook附带的终端(我需要下载另一个吗?)。在编写并保存名为“MyFirstSource.cpp”的文件后,我应该在命令行(终端?)上编写“g++-Wall-cmyFirstSource.cpp”,检查是否有任何错误,并解释“-Wall”和“-c”的用法。我只做了保
在实现支持所有这些构造的语言时,我认为应该可以将break、continue、return和throw视为同一事物的一个方面,即从调用堆栈更高的函数返回(或在continue的情况下对函数执行尾部递归),不一定是当前函数
显然,我不是第一个想到这个的人。有人知道这种方法的讨论(或开源实现)中有任何引用吗?所有这些都可以很容易地在上面实现(比如在Scheme中)
但我怀疑它是否是最有效的实现,因此到目前为止最好的方法是将它们都视为不同的实体-中断和继续在编译阶段作为简单的跳转来解决,返回实现依赖于
我正在学习更多关于编译器的知识。在试图理解时,我偶然发现了“链接”这个词。我以前见过这个词,但并不真正理解它在编译器的上下文中,链接意味着什么?来源:
链接是指从多个目标文件创建一个可执行文件。在这一步中,链接器通常会抱怨未定义的函数(通常是main本身)。在编译过程中,如果编译器找不到某个特定函数的定义,它将假定该函数是在另一个文件中定义的。如果不是这样,编译器将无法知道--它不会一次查看多个文件的内容。另一方面,链接器可能会查看多个文件并尝试查找未提及的函数的引用。”
换句话说:链接将相互依
是操作系统为键盘输入和屏幕输出选择了ASCII、UTF 8等编码和解码方案吗
我还想知道编译器是如何决定字符串的编码方案的 通常,操作系统从键盘接收按键的数字ID。然后将其转换为适当的值。一、 例如,使用相同的操作系统和键盘以4种以上的语言编写文本。我只是在操作系统中切换“键盘布局”并键入,操作系统会对相同的键进行不同的解释。操作系统用于表示文本数据的内容由操作系统决定。在过去,在MSDOS这样的系统中,通常一次只能使用一种语言(也就是说,除了英语或其他任何ASCII足够的语言之外,还有一种语言
我有一个编译器,可以为一个未记录的VM编译成未记录的字节码。我希望能够编译到同一个虚拟机,但我不知道如何去做这件事。我如何学习做这件事?有人发表过他们做同样事情的日志或日志吗
编辑:我忘了提到这是乐高头脑风暴的主题。在任何人提出其他建议之前,我知道所有关于nXc和类似项目的信息,因为我正在帮助第一个FTC机器人团队,该团队只允许使用RobotC或LabView,所以我不能选择这些项目
至于那些建议我以编译器的语言为目标的人,我还没有这样做,因为我希望编译器没有公开的硬件的某些特性会被固件公开,因
在编译器构造中,主要的歧义问题之一是挂起else。
正如Aho、Lam、Sethi和Ullman在《编译器:原理、技术和工具》一书中提到的那样,悬挂else的语法不能用于LL(1)解析器
它不能被处理为LL(1)是真的吗?是真的,它不能被LL(k)或LALR(k)以其纯形式解析。问题在于,对悬而未决的问题有两种可能的解释;这是一个模棱两可的问题(“else”属于最近的“if”,或不属于)
它通常通过坚持两种解释中的一种来治愈,例如,“else属于最近的if”
许多解析器生成器可以“意外地”得到正
我想探索Clojure对于编译器开发的强大功能,但我找不到开始的示例
我是一个完全的新手(来自Ruby),但我相信Clojure应该是实现这一目标的理想选择
让我们精确地说出我在寻找什么:
从clojure中定义的简单的AST开始(比如简单的顺序语言:if、while、func、assign、expression)
此AST的简单访问者(例如漂亮的打印机)
我不太感兴趣的词法/句法分析(因为我认为s表达式足以满足我的DSL语法)
Clojure中的正确习惯用法是什么?下面是我能想到的最简单的
再次修改。删除递归并为中缀表达式编写代码后:
它还包含优先级检查、无递归语法、无起始非终止以及错误消息
%{
#include<stdio.h>
%}
%token ALPHA NUMBER PLUS MINUS MUL DIV LPAR RPAR
%%
expr : expr PLUS term { printf("its an infix expression"); }
| expr MINUS term
| term
;
我一直在翻找TypeScript编译器,在语言规范中发现了以下奇怪的语句:
TypeScript编译器是在TypeScript中实现的
这可能吗?我必须相信tsc(TypeScript编译器)大部分是用Javascript开发的,但也许我在这里遗漏了一些东西 这是真的
引导这样一种语言的关键是从JavaScript开始,在添加语言特性时逐渐将代码重构为TypeScript。但是,自从TypeScript编译器是纯JS以来,已经有很长一段时间了。显然,每当做出破坏性的设计决策时,这确实会带来一些痛
嗯,我认为标题说明了一切,但网页抱怨消息正文缺失
这里有关于代码空间优化的有价值的讨论,但我想知道什么编译器(GCC、Keil、IAR、CLang等)在这方面做得最好。到目前为止,我已经比较了四个(全部免费),Atmel Studio GCC、Yagarto、CodeSourcery Light和ARM GNU嵌入式工具(可在launchpad.net上找到)。作为源代码,我使用OpenSSL 1.0.1c的一部分,该部分配置为无操作系统,并且经过了处理。对于我使用的优化级别(-O1和-Os),
我想创建自己的编程语言。也许不完全是一种从头开始的编程语言,但可能是基于另一种语言
我听说过雅克。所以,我安装了Flex和Bison。但是我不知道如何用它来制作编译器。我已经在其中创建了helloworld项目,但是我如何在其中创建编译器呢
有什么简单的方法可以创建一种小型编程语言吗?我听说过把一种语言翻译成一种语言,例如,Write(),让计算机理解为Print()
这是可能的吗?我在大学的一个高学期的一次演讲中,用雅克语言创造了一门非常小的语言。这是一件非常复杂的事情,我不建议就这样做
您可
我正在为BB10(在Linux主机上)设置一个开发环境,并下载并安装了最新的Momentics 10.2(beta版)
虽然我可以运行qde(开发环境),但当我尝试编译一个示例项目时,我看到一个错误“在路径中找不到程序qcc”。当然,我的系统上没有qcc。(但gcc在那里)
我认为这将/应该作为mementics包的一部分安装。(BB网站让它听起来像一步安装)。有人能告诉我我错过了什么吗?
您说您安装了IDE,但您是否从momentics内部下载了最新的本机SDK
启动IDE时,可以下载并安装
我正在为一种玩具语言编写一个玩具编译器,假设它有JavaScript语法
假设源文件是:
var val = 123;
我的简单编译器将包括一个标记器和一个解析器(目前)
标记器是否应返回整个语言关键字,例如var或逐字(v,a,r)呢
迟早我会不得不识别关键词、文字等,我想知道这类工作的地点在哪里?标记器的全部目的是获取您的输入流(字符),并为您提供可用于语法分析的标记
因此,您会期望令牌服务器提供以下内容:
T_KEYWORD_VAR
T_VARIABLE(val)
T_KEYWORD_E
希望这不是一个多余的问题
作为scheme的新手,我知道语法case宏比语法规则替代方案更强大,但代价是不必要的复杂性
然而,是否有可能在scheme中实现Common Lisp的宏系统,它比语法规则更强大,使用语法大小写 下面是Guile对定义宏的实现。注意,它完全是用语法case实现的:
(define-syntax define-macro
(lambda (x)
"Define a defmacro."
(syntax-case x ()
((_ (mac
我试图找出以下语法是含糊不清的还是毫不含糊的:
stmt->IF expr THEN stmt | matchedsmt
matchedsmt->IF expr然后matchedsmt ELSE stmt | other
它实现if-then-else结构
expr和other被认为是终端符号,因为在这个问题中我们不关心它们
我一直试图找到一个包含多个解析树的字符串,但我找不到
你能帮帮我吗?语法模棱两可,尽管方向正确:)
这里有一个模棱两可的地方:
IF c1 THEN IF c2 THEN
我刚刚与一位同事进行了一次对话,我们正在讨论V8 JavaScript引擎。根据维基百科
V8在执行之前将JavaScript编译为本机机器代码[…],而不是更传统的技术,如解释字节码或将整个程序编译为机器代码并从文件系统执行
(如果我错了),“解释字节码”是java的工作方式,“编译整个程序”将适用于C语言或C++语言。现在,我们对差异、相似性进行了猜测、辩论和假想。为此,我建议请专家们这样做
那么,谁能做到呢
命名、解释和/或引用所有主要方法(例如预编译与运行时解释)
设想或提供一个关于资料
我正在浏览ast.Go at的Go源代码,有3种类型的接口,即表达式、语句和声明。但仅凭源代码我无法理解它们之间的区别。我可以理解的是,表达式生成的对象可以被赋值、比较或用作参数,而语句是一些流控制,如if-else或for-loop。
但我找到了一些定义,比如
// An IncDecStmt node represents an increment or decrement statement.
IncDecStmt struct {
X E
当我在互联网上研究编译器时,我遇到了几种不同类型的编译器,包括普通AST、单一静态赋值、连续传递样式等。然而,似乎没有一个地方列出所有这些
如果您实现了一个编译器(或另一个带有IR的软件),您使用了什么类型的IR?为什么?你喜欢它的什么地方,什么地方让你不高兴?早在我构建编译器时,《龙之书》是我的参考资料,与编译器相关的内容应该可以帮助你找到最新版本。)
如果新版本和旧版本一样好,那么您将获得比您容易消化的更多信息
对我来说,关于表示的一个关键问题一直是如何生成有意义的错误消息并将它们与源代码行
现在我用nti替换了int。它是否会产生任何词汇错误
另外,如果我使用
nti a, b;
这仅仅是语法错误还是词法错误?当然这取决于语言,但在大多数语言中,nti和Int都是有效标识符,因此词法分析器会对其进行分类。所以不会有词汇错误
如果该语言进一步使用C风格的声明语法并允许用户定义类型,那么这两个示例在语法上也是有效的。只有在语义分析期间,您才会得到一个错误,即没有定义名为nti或Int的类型,当然,除非定义了,在这种情况下,代码是正确的
这是C和C++本身的例外,在这里定义的类型必须在
我正在bison中创建一个解析器,我必须指定以下二进制和可变运算符的优先级和关联性
关联性:左
算术:二进制/可变
固定性:后缀
运算符:表达式[expression],表达式.i,函数(……)
问题是,我不知道这些运算符与关联性和优先级有什么关系。有人能给我举个例子说明这是如何发挥作用的吗
例如,如果我有规则
.
.
.
%precedence HIGHEST
%%
expr : expr '(' expr ')' %prec HIGHEST
%%
那么expr'('expr')形式的所有内
假设我有一个有很多参数的函数,比如:
int function(-6 integer arguments-,
-8 double arguments-,
int x,
double y,
int a,
double b) {
// skynet initiation code
}
根据SystemV AMD64 ABI调用约定,前6个整数参数应在RDI、RSI、
我在读各种中间表单,但除了类似维基的条目外,我无法获得关于A-normal表单的信息。这里有人知道这件事吗?或者有很好的资源吗?请参阅
计算机科学,行政管理
范式(缩写为ANF)是一种
程序的标准形式,它是
由Flanagan等人于1993年引入
充当中间人
函数编译器中的表示
对进行后续转换的步骤
机器代码更直接
在ANF中,函数的所有参数
一定很琐碎。即评估
每一个论点都必须停止
马上
文法
下面的BNF语法描述了
改进的纯λ-演算
支持ANF的约束条件:
编译器中使用的ANF变体或
在研究
我正在为纯功能程序开发一个虚拟机,我希望能够测试和使用各种各样的Haskell模块。VM将非类型化lambda演算中的基本术语作为输入。我想知道从现代Haskell模块(例如使用MPTC、模式保护等)中提取这种表示的好方法是什么。我做了一些研究,但似乎还没有一个工具可以做到这一点(我很高兴弄错了),这没关系。我正在寻找一种方法
GHC核心似乎过于注重操作,特别是因为虚拟机所做的一件事就是显著改变评估顺序。有没有更接近lambda演算的可访问的中间表示法?Hm。。。听说过这个吗?我不知道你需要什么
我有一个包含数千个源代码文件的Java项目。对于提供Java源代码的类,我经常在运行时遇到ClassNotFoundException。当我禁用保存时编译时,我没有遇到这个问题,但这是一个有用的特性,我希望启用它
有没有一种方法可以让我告诉NetBeans“我知道你认为这些文件已经编译过了,但无论如何都要安排它们进行编译(或者我希望你重新编译)”NetBeans应该在保存文件后进行编译;未能做到这一点是一个bug,而不是最终用户应该努力解决的问题
但是,可以创建自定义构建脚本,导入build.x
大多数编译器如何在32位环境中对64位操作数(例如长整数)执行操作?换句话说,有没有一种方法可以在一个步骤中实现这些操作,或者我们需要访问多个内存位置来实现这些操作?它们使用两个寄存器来保存64位的值。一个用于低32位,一个用于高32位
对于x86,64位加法/减法是使用带进位的加法和带借位的减法指令完成的:
add %eax, (lower 32-bits of operand)
adc %edx, (upper 32-bits of operand)
64位乘法要复杂得多,但也可以
我有一个简单的问题
我正试图复制我的一位同事用源代码编译的程序所做的设置。我已经找到了源文件的目录,我想看看他用来进行配置的确切命令
考虑到程序的性质,我猜他没有运行简单的“/configure”。我想知道他使用了哪些选项,例如…/configure--option1--option2,等等
有简单的方法吗?试试/config.status--version
在“项目选项”窗口中,这两种设置有什么区别
第一个包含全局conational。第二个继承全局条件,如果需要,可以添加其他条件。这只是跨多个构建配置共享公共条件的另一种方式
在我的编译器课程中,我正在为MIPS体系结构构建一个基于图着色的寄存器分配器。我正在遵循Muchnick对我的实施的相同处理
Muchnick对如何处理这些分配器中的函数参数有些模糊
我已经做了一些假设,我想我会澄清同样的问题
有一个步骤可以将中级IR转换为低级IR。嵌套函数调用尚未处理。我的想法是从右到左扫描函数调用,并为最内部的向外调用设置IRs。通过这种方式,我可以使用MIPS调用约定,将前几个参数分配给参数寄存器,剩余的参数分配给堆栈,溢出量最小(只有1个)
书中的寄存器合并处理对我来说
当我为EX在C中编译程序时++
我能说出它是从哪个操作系统编译的吗?或者,甚至可能是为了获得关于编译它的电脑的更多信息?信息-它的存在,如何提取它等等-非常依赖于使用的编译器。例如,我手工制作的C++=>C++编译器不会将这些信息存储在任何地方。
敬礼
在阅读dragonbook的第3章(词法分析)时,我几乎了解了所有内容(他们如何用正则表达式指定标记),直到他们开始谈论有限自动机。这似乎是描述词汇分析器的一个重要部分
现在我理解了有限自动机的概念,但我不明白它在词法分析器中的作用和用法?为什么不仅仅用正则表达式指定标记
提前感谢。正则表达式可以用有限自动机表示,更精确地说,可以用确定性自动机表示
编写正则表达式时,lexer会将其转换为DFA以在文本中查找匹配项。当然,有限自动机在词汇分析器中有它的作用
有非常简单的算法可以将正则表达式
我注意到有一个地方,他们可以从windows命令行将FreePascal编译器称为“fpc”,如:
fpc my_program_source.pas
如何做到这一点?是不是某个命令分配了“command=>exeFile”
谢谢。下面是要做的:
在计算机上查找FPC.EXE。蛮力方法是
DIR/S C:\FPC.EXE
转到Windoze控制面板并查找系统。在“高级设置”下,您应该可以找到路径变量
修改路径,使其看起来像
WHEVER-IT-WAS:C:\WHAT\EVER\DIRECT
我是编译器构造领域的新手,我想知道直接编码和表驱动lexer分析器之间的区别是什么
如果可能,请使用简单的源代码示例
谢谢
编辑:
在书中,作者将lexers分为三(3)种类型:表驱动、直接编码和手工编码 我假设您所说的“直接编码”是指手写的词法分析器,而不是作为词法生成器输出的词法分析器。那样的话。。。(见下文。)
。。。表驱动的lexer是一个(通常自动生成)程序,它使用某种查找表来确定要执行的操作。考虑对应于正则表达式 Ab*A < /C>(故意不最小化):
如果我们只考虑字符“a”和“
Java或C#等语言的编译器会抱怨,如果您试图使用尚未(肯定)分配/初始化的局部变量
我想知道这个功能是如何在编译器中实现的。显然,有关变量初始化状态的信息可以保存为布尔标志,并在检测到赋值语句后进行相应设置。但是像循环体或条件语句这样的(嵌套的)子作用域呢?这相对容易。在使用变量之前,每个可能的代码执行路径都必须指向赋值。循环也被视为可能的路径;重复对于这种分析来说并不重要。这可以通过计算活性信息来实现
编译器通常将源代码转换为较低级别的中间表示(IR),将代码划分为基本块(无跳代码),并从中
当我们编译android应用程序时,我们不需要考虑它使用的处理器类型。e、 g.如果应用程序与图像处理相关,则应用程序开发人员不需要知道DSP手机硬件的图像处理器。此外,每部手机将有不同的供应商DSP,这些DSP将有不同的指令集。编译器如何知道这一点?它不知道。它产生解释性字节码。它是适应显示硬件的运行库,而不是编译器。它是Android,顺便说一句:)@500 InternalServerError没有区别。只是不同的字节码。它仍然是字节码,而不是本机代码。@EJP:我知道,我只是指出了OP的
我很难理解除了C以外的编程语言的标准库是如何编写的
据我所知,C标准库可以在C和汇编程序的混合体中实现,其中需要汇编程序,以便可以调用系统调用,从而
fopen,fscanf。。。可以使用
其他编程语言如何使用其标准库实现这一功能(处理i/o、文件以及需要系统调用的所有其他内容)?它们都允许像C这样的汇编程序内联,还是有其他方法
我已经读到C及其标准库可以用于实现其他语言库,但我不确定这是如何实现的
edit1.试图更具体一些。
(实现标准库的语言称为new\u lang)
如果有人能详细说明第
我想知道是否有一些众所周知的技术可以分散应用程序的代码流。在我的例子中,我想在我自己的字节码上使用它们,字节码由我为一个项目编写的一个小vm执行。我非常有兴趣尝试使用我的字节码流来学习一些关于这种技术的知识。我在inet上搜索了一下,几乎找不到关于它的信息
干杯。几年前,我参与了一个项目,对Flash ActionScript代码进行模糊处理,以破坏反向工程的尝试并确保游戏安全。我们建立了一个工具,每当有人加载游戏时,都会对flash进行模糊处理
实际的混淆是在VM模型上完成的,它基于以下简单的
我的任务是从编译器设计学校的工作中为类C语言生成mips指令。从计算机体系结构中,我们了解到mips是一个基于寄存器的指令集,它显式地管理32个左右的通用寄存器。当我从词法分析、构建AST到生成真实代码的过程中,我发现基于寄存器的指令非常难以想象。由于我目前正在关注Python解释器的编译器部分的设计,我发现它基于堆栈的字节代码非常容易理解和实现。然而,我正在学习的课程需要3地址中间代码,最后是mips代码
下面是我发现基于堆栈的代码容易而基于寄存器的代码难的原因:
基于堆栈的代码基本上只是推
如何在ANTLR中实现运算符优先级
目前我正在使用XText/Antlr包
编辑:
我按照sepp2k的建议做了,操作符优先级现在可以工作了,但是像3+*这样的东西现在也可以工作了。操作员基本上是从树上“掉下来”的
另外,我在ANTLR的网站上尝试了C语法,同样的事情也发生在ANTLRworks上
有人知道问题是什么吗
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
我只能在全局范围内生成函数。范围嵌套意味着能够在函数中生成函数,对吗?用这种语法我做不到。可能吗
/* C-Minus BNF Grammar */
%token ELSE
%token IF
%token INT
%token RETURN
%token VOID
%token WHILE
%token ID
%token NUM
%token LTE
%token GTE
%token EQUAL
%token NOTEQUAL
%%
program : declaration_li
我正在考虑用haskell编写编译器,为了获得一些知识和经验,我将尝试为现有语言实现编译器。有人能给我一份适合这种语言的清单吗
提前感谢编写编译器的最简单语言是现有的“深奥语言”,比如,因为它们有最小的指令集和最简单的语法。你可以尝试一种更复杂的语言,但最好在进一步研究之前先用一些简单的东西来了解基本知识。据我所知,最容易编译的语言之一是Forth。我认为为Forth-in-Forth编写一个编译器是完全可以实现的,即使是一个相对新手。世界总是需要另一个c编译器:)Pascal可能是一个很好的开
我可能不是第一个注意到VB6“完全编译运行”既快又好的人(因此显然是一个增量编译所需的过程),而Make exe需要很长时间。有时太长了,尤其是当我别无选择,只能测试和排除可执行文件及其独立进程的行为,而不是调试在IDE进程下运行的版本时
那么,是否有任何编译器选项或其他魔法可以将make转换为快速、增量模式,在这种模式下,它将编译更改的模块,然后将它们与预编译的其他东西链接起来
或者这是一个非常慢的链接器而不是模块编译器吗?进入项目|属性。。。对话选择编译选项卡。选择编译为P代码
编译为本机代
假设程序名为algo_graphs.c
我使用g++-m32-c-g-O3 algou_graps.c编译它,并假设没有编译器错误。导致此错误的原因可能是:
-bash:./prog_name:没有这样的文件或目录
在终端上运行/algou\u graphs之后?您应该使用-o[NAME]选项来设置可执行文件的名称。例如:
g++ algo_graps.c -o executableName
./executableName
或者尝试ls查看此文件的名称。默认情况下,UNIX可执行文件名为a
我正在使用bison为一种玩具编程语言编写解析器,但我遇到了一个难题:
我的grammar.y文件如下:
%{
#include <stdio.h>
#include "util.h"
#include "errormsg.h"
#define YYDEBUG 1
int yylex(void); /* function prototype */
void yyerror(char *s)
{
EM_error(EM_tokPos, "%s", s);
}
%}
%unio
基本上我有这个盒子:
# cat proc/cpuinfo
system type : RTL8672
processor : 0
cpu model : 56322
BogoMIPS : 619.31
tlb_entries : 64
mips16 implemented : yes
cat proc/version
Linux
我正试图为某些特定格式的消息编写一个编译器。由于我正在构建不同格式的特定消息,所以我现在的问题如下所述
< WORD : ([LETTER]){2,5}>
< ANOTHER_WORD : (<LETTER>|<DIGIT>){1,5}>
< SPECIAL_WORLD_EN : "START">
< SPECIAL_WORLD_FR : "COMMENCER">
< SPECIAL_END_WORLD_EN : "E
我最近在一个编译器设计类中遇到了一个术语SUIF。我试图研究它,但无法从SUIF网站的文件中了解它的概况。我只能知道它是基于面向对象的风格,并且遵循树结构。
有人能帮我理解它吗?即使是SUIF网站以外的链接也会对我有很大帮助
谢谢
例如,就我所知,J是一种语言,仅在编写编译器时才进行解释,因为它的语法类型不可能/不实用(我远不是专家)
考虑到我们现在已经有了将JIT与元编程功能(如Racket或Scheme)相结合的语言,是否有可能将仅解释器的语言实现为一组宏,以编译为宿主语言,而不影响原始语言行为?
我这样问是因为,据我所知,JIT模糊了“编译时与运行时”的界限,因此,当您运行(比如说JITted Scheme程序)时,它应该能够提供与等效解释器相同的行为
这是正确的吗?程序的JIT版本必须与解释版本具有完全相同的可识别
1 2 3 4 5 6 ...
下一页 最后一页 共 37 页