Compiler construction 关于解析器、解释器和编译器的学习资源

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此,我需要以解析器、解释器和编译器的构造为基础。因此: 有人知道关于构造解析器、解释器和编译器的好资源吗? 编辑:我不是在寻找诸如Lex、Yacc和Bison之类的编译器/解析器编译器……不太容易,但非常详尽:是关于这个主题的最好的书。Aho的《龙之书》是标准参考,但另一个不错的选择是Andrew Appel的(也有和多种口味)。它一步一步地引导您了解编译器/解释器的每个必要组件,并提供大量有用的源代码。RE:lex、yac

Compiler construction 编译程序设计

可能重复: 如何设计简单的编译器? 我想为MCA项目设计编译器。你应该去看看。阅读:,有点过时,但可能有用(是pdf版本) 此外,您还必须通过大量的资源来了解这一点。您没有“编译器”和“简单”是相互排斥的术语。以下是编译器构建资源的最终列表: 你自己读过吗?读过。我的计算机科学课程中编译器设计课程的必读读物。绝对不是。您可以在一周内轻松地为一种小型语言编写编译器。大多数网站要花更长的时间才能实现。你可以很容易地在一周内为小内容编写一个网站。大多数编译器的实现时间要比这长得多。:)编写编译器是我

Compiler construction 使用SDCC的编译器警告

使用SDCC3.0.0。 编译此代码 #include < pic16f84.h> void main(void) { TRISA0=0; RA0=1; } #包括 真空总管(真空){ TRISA0=0; RA0=1; } 并收到这些警告 daedalus@Eurydice:~/Projects/PIC$sdcc-I/usr/share/sdcc/include/PIC-p16f84 test.c /usr/share/sdcc/include/pic/pic16f84.h:1

Compiler construction 使用-msse编译器标志

我正在运行允许使用编译器标志的基准测试软件,所以我尝试混合使用各种标志来找出最有效的方法。我的问题是,是每个版本的msse都必须启用,还是每个新版本都拥有旧版本所拥有的一切?例如,我是否需要-msse2-msse3-msse4.1和-msse4.2,或者-msse4.2是否涵盖所有这些?否,一般来说,如果您使用例如-msse3,则这意味着在此情况下所有早期SSE选项-msse,-msse2

Compiler construction 为CUDA C/C+添加永久包含和库路径+;编译程序

我目前正在做一些工作,包括使用CULA库和GPU计算SDK库 在使用NVCC编译时,我必须使用以下标志: -lcutil_x86_64 -lcula_core -lcula_lapack -lcublas -lcudart -lcuda -I$CUDA_SDK_ROOT_DIR/common/inc/ -L$CUDA_SDK_ROOT_DIR/lib/ -L$CULA_LIB_PATH_64 尽管这很好,但我已经厌倦了每次都必须指定include和library路径。是否有某种方法可以运行编译

Compiler construction 何时检查是否需要GC?

我正在为垃圾收集语言编写一个编译器,对于如何知道何时应该运行垃圾收集程序感到困惑 我可以想到两种方法: 在每次堆分配之前进行GC检查。因此,如果任何分配即将失败,我们将运行GC 要“定期”运行GC检查,并在空间“危险”不足时执行GC扫描 我目前使用的是第二种方案,因此我在每个函数项的开头都有一个GC检查,以确保GC检查执行得足够频繁 有人知道我在哪里可以找到关于这个主题的更多信息吗?对于你的问题“有人知道我在哪里可以找到关于这个主题的更多信息吗?”最好的参考是@Raymond Chen 要了解现

Compiler construction 学习编程语言如何工作

我已经编程多年了(主要是Python),但我不明白编译或执行代码时幕后会发生什么 在我之前问过的关于操作系统的问题中,我正在寻找一个关于编程语言工程的温和介绍。我希望能够定义和理解编译器、解释器、本机代码、托管代码、虚拟机等术语的基础知识。什么是一种有趣且互动的学习方式?关于计算机程序结构和解释的讲座,这正是您想要学习的类型。随附的教科书也很有用,尽管我还没有亲自看完整本书。我认为观看讲座相当不错,可以让你达到60%的目标。你可以找到很多讲座。例如在Itunes U哇,这是一个巨大的问题,有大量

Compiler construction 不清楚链接器的工作

我在windows上使用C语言。这个问题以前是问题的一部分。我打破它是为了减少问题的数量。这是一个独立的查询(不依赖于前面的问题) 如果没有任何链接(即,我没有使用任何库。我知道它不会有任何用处。)链接器会更改汇编程序的目标代码输出吗?如果是这样,它会发生什么变化 我听说LINKER还执行一些内存映射的操作。我不明白怎么做。程序没有运行,只是处于制造阶段。链接器如何映射到内存?看起来怎么样?链接器的所有功能是什么 当人们提到“搬迁”、“地址绑定”时。我真的不明白他们的意思。它是什么&它的目的是什

Compiler construction FogBugz是用什么编程语言编写的?

据我所知,FogBugz最初是用VBScript编写的。现在很明显,他们使用自己的自定义编译器和语言,将源代码翻译成更“易访问”的语言,如PHP和(我认为)C。这种语言有名字吗?hello world在里面是什么样子的?有希望看到这个编译器向公众发布吗 芥末,不是公共的,可能不是:-)FogBugz是用芥末和C#的组合写成的 Wasabi是一种基于VBScript的定制语言,最初编译为VBScript、PHP和JavaScript。它仍然在FogBugz中使用,但输出只有C#和JavaScrip

Compiler construction 以JVM而不是x86为目标的缺点是什么?

我正在发展一门新语言。我最初的目标是在Windows平台上编译成原生x86,但现在我对此表示怀疑 我看到一些新语言以JVM为目标(最著名的是Scala和Clojure)。当然,不可能轻松地将每种语言移植到JVM;这样做可能会导致语言和设计的微小变化 提出这个问题后,我甚至对这个决定更加怀疑。我现在知道了一些“pro”JVM参数。最初的问题是:在为新语言创建编译器时,以JVM为目标是一个好主意吗 更新了问题:在Windows上以JVM而不是x86为目标的缺点是什么?如果您为JVM创建了一种语言,您

Compiler construction 递归下降解析器与函数式编程

所以最近我一直在写一个简单的编译器来更好地理解编译器的概念。作为stackoverfolow的忠实读者,似乎有一个共识,即用函数式语言编写编译器比命令式语言更容易。为此,我想我应该试着杀鸡取卵,用F#编写一个编译器,这样既可以学习函数式语言,又可以同时编写编译器 我一直在阅读龙之书,并决定从用F#手工编写的递归下降解析器开始。然而,《龙书》中几乎所有的代码样本都是命令式的。例如,match-token函数通过副作用完成了大部分工作 所以我的问题是,一个更传统的解析函数方法(即几乎没有副作用)会是

Compiler construction 变体的转换系统

我已经编写了一个variant类,它将用作动态语言中的主类型,最终将允许256种不同类型的值(header是一个无符号字节,实际使用的值只有20个)。现在我想实现类型之间的转换/转换 我最初的想法是一个查找表,但由于所需的内存量太大,因此无法实现 有哪些替代方案?目前,我正在从研究和其他人的建议中考虑另外三种方法: 将类型分组到更大的子集中,例如numeric、collection或other 制作一个包含CanCast(from、to)和Cast(Variant)方法的转换接口,并允许将实现该

Compiler construction FlashDevelop中的编译器错误,不';是否不在Flash Builder中显示?

我正在尝试使用FlashDevelop构建一个项目,我可以使用FlashBuilder构建该项目,而无需任何特殊设置 FlashDevelop显示错误: “对……的不明确引用” “与继承的定义存在冲突…” 并且不编译 我查看了编译设置,但没有找到禁用此功能的方法 不要建议我修复错误,我只想知道为什么它在Flash Builder中工作而不是在FlashDevelop中工作。我使用的是不同的Flex SDK(从目录中删除了版本名,并假设它是相同的…。您需要提供完整的错误消息。这不是一个可以忽略的错

Compiler construction 源变压器是如何工作的?

我一直在考虑像和这样的源代码转换器。从他们各自的网站上,我看到这些工具将源语言转换为目标语言,然后使用目标语言的编译器生成最终的可执行文件。我感到困惑的是,这些工具如何处理源语言是否是内存管理语言(PHP、Haxe-lang)而目标语言是否是非内存管理语言(C/C++)的情况。我知道它会在编译时添加一个VM来处理这个问题。像HipHop和Haxe这样的工具做什么?在哪里可以找到编程语言/编译器文献中与此主题相关的文章 谢谢。Haxe需要垃圾收集,它不仅仅是一个转换器,它还向目标语言添加了所需的一

Compiler construction 无法执行wfc386没有这样的文件或目录-Watcom Fortran IDE

我得到了一个遗留fortan IV程序,我需要为遗留编程语言类编译该程序,并且我被指示使用来自的Watcom IDE 我的步骤如下: 将IDE安装到C:\Program Files\Watcom Fortan编译器 在C:\sampleProject.wpj创建一个新项目 选择Win32(NT/95/Win32 S)目标环境 选择Windows可执行文件(.exe)作为图像类型 选择“源”菜单下的“新源” 找到并成功地将C:\hilbert.for文件添加到项目中 从主菜单栏中选择“全部制作”

Compiler construction 目前哪些编译器支持Haswell事务性内存?

哪些编译器(截至2014年5月)能够生成使用事务性内存功能(受限事务性内存,而不仅仅是锁省略)的代码 GCC,自开始支持英特尔RTM: 通过-mrtm和-mhle可获得对英特尔RTM和HLE内部芯片、内置函数和代码生成的支持 可以安全地假设,英特尔ICC的最新版本也有类似的内部函数,但我找不到指定支持()的特定版本 此外,可能存在对各种较小语言和JIT的支持,随着更透明的支持的到来您能否提及报纸名称或为其添加其他链接?由于提供的链接不起作用。标题为“英特尔高性能计算事务同步扩展的性能评估”。我将

Compiler construction 如何创建针对JVM的自己的编程语言?

我想创建自己的针对JVM的编程语言。我不知道怎么做。我必须创建自己的编译器吗?是否所有编程语言都有唯一的编译器,或者是否存在可以修改的现有编译器 我找到了一些关于瞄准目标的信息 我还发现了编译器设计方面的问题。是的,每种语言都有自己的编译器。有几种类型的编译器可以编写,每种编译器都会变得更复杂,并且是在前一种编译器的基础上构建的: 识别器,仅回答输入源是否有效语法 解析器,创建输入源的内存表示(称为AST-抽象语法树) 编译器(生成输入的翻译形式) 优化编译器,如3所示,但在生成输出之前优化AS

Compiler construction 哪一个在编译器设计中有更好的应用?

正如我们大多数人所知,创建编译器总是一项艰巨的任务。我想知道哪一个库有更好的应用程序来实现这一点,Java还是C。我在这里看到的问题是,与C相比,Java要长得多,但控制自由度更高。C较短,编译速度可能更快,但它不允许太多的控制。在我看来,哪种语言的应用程序更好?构建编译器主要需要的算法和数据结构不是这两种语言提供的标准库所固有的: 词素 通过将多个正则表达式组合到多出口状态机中进行词法提取 词素流 抽象语法树 用于检查语法和构建AST的解析器 控制流图 控制流施工 。。。还有很多 在构建编

Compiler construction 静态链接重新定位的地址

我对静态链接有一个非常基本的怀疑 假设我们有两个对象代码A和B。对象代码B包含由A调用的函数B() 现在假设在目标代码中,在第100个位置调用函数B() 现在,函数B()将直接放置在位置100,还是放置在最终目标代码文件中的其他位置,并在第二次传递链接期间解析(例如函数B()将放置在最终目标代码中的位置150,对B()的函数调用将解析为150)?链接时,链接器将把来自A和B的函数放在内存中的适当位置。然后它将查看A第100个位置的call指令,并将B()的地址粘贴到此指令中。@Zephyr是的,

Compiler construction 编译器优化实现

我只需要在编译器上实现优化技术。。。 你能告诉我一个把高级语言代码转换成三地址代码的工具吗。。。。 所以我可以在3地址代码上实现一些技术。通过在Java或任何其他语言上编写程序 我不想做编译器。只是想展示这些技术的工作原理。如果你只是想展示你的优化技术,那么你为什么不编写一种汇编语言,在其中编写一些次优代码,然后通过你的优化器呢 如果您希望在真实数据上进行演示,那么我建议您编写一个工具,将JVM指令或CLI指令转换为三地址代码格式。这样,您就可以显示您的优化器在使用各种语言编写的各种大型应用程序

Compiler construction 在什么情况下,无序执行会导致更高效的代码

我试图了解它是如何工作的,为什么使用它,以及在什么情况下应该使用它。然而,我不完全确定在什么情况下安排指令顺序更有效,有人能给我举个例子吗 浮点运算是有用的一种情况——这些运算通常比“正常”指令花费的时间长得多,因此CPU在多条指令上运行这些指令到一侧是有用的,而其他正常的程序指令则发生在主ALU中 它还可以帮助保持所有管道处于活动状态-一些CPU有多条指令管道(例如,一条专门用于分支,一对专门用于算术运算符,一对用于浮点和SIMD指令)。对指令进行重新排序可以使CPU保持所有管道都已满,而不是

Compiler construction 使用Mathematica理解编译器优化:访问使用SetDelayed创建的定义?

最近,我对更好地理解编译器后端所做的优化很感兴趣。我认为使用Mathematica来探索这一点可能会有所帮助,因为它使创建、显示和操作语法树变得非常容易 我想我会从简单开始,看看不断的传播。因此,我编写了一个简单的函数,并尝试查看语法树 f2[x_, y_] := Module[{temp1}, temp1 = 5; Return[(x + temp1)*y]; ] FullForm[f2] 然而,FullForm[f2]的结果只是f2。我知道这个表达式的右侧必须存储在Mathem

Compiler construction 类型检查器库

我正在编写一个编译器,我正在寻找一个可以为我进行类型检查的库。到目前为止,我没有发现任何有用的东西=/有人知道好的类型检查库吗?我在使用Haskell,但是如果图书馆是好的,我会考虑其他语言=) < P>也许Martin Sulzmann的帮助会有帮助。其中一个可能会起作用?可能有一些库可以帮助您使用类型检查器,特别是当您确实需要类型检查器而不是类型推断时。例如,有一些库在Haskell中嵌入了逻辑编程——在10000英尺的高度,使用逻辑编程编写类型检查器似乎比使用函数编程容易一些(例如上面sh

Compiler construction 编译器设计:您如何区分;op“U减去数字”;及;“否定”吗;?

如何区分标记序列“op_减号”和简单的负数?我认为它取决于上下文,取决于解析源代码时遇到的操作数 根据您选择/遇到的语法类型,在处理减法运算时,您可能会遇到以下情况: operand1 - operand2 或者,如果您的语言使用前缀符号,您将得到如下结果: - operand1 operand2 (- operand1 operand2) 在这两种情况下,如果您处理的是减法或负数,那么您应该能够从上一个标记(在中缀表示法的情况下)或从下一个标记/下两个标记的前瞻性推断,因为后者只有一个操作

Compiler construction OpenSPARC T1平台的交叉编译器?

我正在使用运行Linux或Win7的x86处理器。我想买一些 在OpenSPARC T1平台上工作的独立应用程序。手册上写着 以下是: “包含Make脚本,以便于重新编译C示例程序 必须在带有SunStudio编译器的SPARC计算机上运行。” 我需要SunStudio编译器是有道理的,但是在x86机器上也能使用它吗?或者SunStudio编译器只是在SPARC体系结构上工作 非常感谢,, Mike该编译器也可用于x86上的Linux。你为什么不试试呢

Compiler construction GNAT支持的目标体系结构列表?

我想知道GNAT支持哪些CPU体系结构,特别是在嵌入式领域。gnu C编译器支持的每个目标是否自动也支持Ada?更严重的是,快速阅读man gcc可以看出语言和体系结构之间没有任何限制。并不是说一个人可能不存在 不过,该声明承诺: 如果特定选项的说明未提及源 语言,您可以将该选项用于所有受支持的语言 从man gcc看来,你的问题是肯定的。AdaCore's有这个列表。以下是我为Freenode上的#Ada IRC频道编写的factoid,它回答了你的问题: 目标x:理论上,任何平台都可以被Ad

Compiler construction 用read宏编译Lisp代码

当我将一个lisp代码文件编译成字节码或原始程序集(或fasl文件)时,我在理解read宏时遇到了一些困难。或者我确实理解,但不知道。我真的很困惑 当您使用read宏时,您不需要有可用的源代码吗 如果您这样做,那么您必须执行构成读取宏功能的源代码。如果你不这样做,那么当你可以做像读字符这样的事情时,它们又如何工作呢 要做到这一点,如果你想让read宏使用一个重新定义的变量,你必须在它之前执行所有的代码,所以这就变成了运行时,这会把一切都搞糟 如果不在代码之前运行代码,那么上面定义的内容将不可用

Compiler construction 为什么dev.dmCopies返回编译器错误?

我正在做一个在信封上打印地址的程序。作为程序的一部分,我需要更改一些默认打印设置,例如纸张大小。为此,我使用下面列出的DocumentProperties代码 HANDLE hPrinter; char pDevice[35]; strcpy(pDevice,"Test"); PRINTDLG pd; string name; ofstream print; memset( &pd, 0, sizeof( pd ) ); pd.lStructSize = sizeof(

Compiler construction CPU对于解释器的作用是什么?

我知道编译器采用高级语言,将所有语言翻译成机器语言(或者先是汇编语言,然后是机器语言?),发送到CPU,现在CPU的任务是实际运行它并显示输出/执行任何操作 我知道在解释器的情况下,它将高级程序的第一行翻译成某种东西(这是什么东西?是机器级语言吗?),然后执行和运行某种东西(由解释器或CPU执行和运行?)。然后它进入下一行代码,依此类推 因此,简而言之,对于CPU在解释器中的作用,我有点困惑。编译语言和解释语言之间的CPU没有区别。将源代码转换成CPU能够理解的东西也会采取同样的步骤——这只是时

Compiler construction icarus verilos编译器的语法错误文件

有人知道哪个文件在icarus verilog编译器中具有语法吗?还有哪一个在处理和打印时有语法错误 提前谢谢大家我想语法是bison文件https://github.com/steveicarus/iverilog/blob/master/vvp/parse.y(lexer处于https://github.com/steveicarus/iverilog/blob/master/vvp/lexor.lex)。您可以开始在https://github.com/steveicarus/iveril

Compiler construction 是什么导致编译器运行缓慢? 我发现GO与编译语言相比,编译速度快得多,与其他C++语言一样。我想,几乎和运行解释语言一样快。Haskell比go-to-compile慢,即使它像go一样,是用运行时和垃圾收集器编译的(对吗?)。我怀疑类型系统的复杂性是主要原因,因为Haskell的类型系统比go更复杂 如果有人想要创建一个新的编程语言,而他的主要任务是编译时间,那么他在词法、句法和语义分析阶段应该考虑什么?

解析会变得相当昂贵,并且就像前面的评论者所说,如果可能的话,你希望避免重复它。这就是为什么有些语言使用模块系统而不是C风格的头文件的原因之一。与其在其他源文件中多次包含一个文件并重新解析整个过程,不如编译模块并通过某种接口导出其功能 除此之外,优化还会影响编译时间。目前,生产编译器试图将优化过程限制在优于二次复杂度的范围内,以避免缩短编译时间,但仍有很多工作要做 对于您的语言来说,用例的性能越关键,您就越希望编译器进行优化。高质量的代码生成和优化成本相对较高。使用-O0通常要快得多。要真正限制编

Compiler construction 有人能告诉我如何使用规则从这个语法中消除左递归吗?

我正在尝试从语法中删除左递归,我有时可以这样做。我显然不知道规则,因为我只知道如何通过反复试验来做到这一点。我看到的规则如下: 在这个特殊的例子中,我知道我可以先从S规则中删除立即左递归,然后得到: S --> XSS' | aS' S' --> XS' | SbS' | epsilon X --> Xb | Sa | b 然后,从这里我可以将S产品合并到X产品中,以获得: X --> Xb | XSS' | aS'a | b 然后我可以从那里移除立即左递归,得到

Compiler construction 为什么代码在机器上运行?

我不能说我完全理解编译器是如何工作的。而且,我对他们知之甚少。然而,我一直想知道机器如何理解我们在文档中编写的代码 我知道我们写的东西被翻译成了某种东西(如果你能给我一些编译的细节,那就太好了),然后在某些操作之后,一个二进制代码出现了 但是,电路如何理解和操作0和1呢。我对计算机体系结构有一些了解,我知道晶体管是如何工作的,ALU是如何工作的,它是如何实现的。我知道RAM是如何工作的(或多或少,所以任何进一步的解释都会很好),也知道HDD 但是,当我试图想象一个编译器如何产生一个神奇的东西(至

Compiler construction 仅将环境的相关子集传递给eval的方案解释器

是否有一种有效的方法来构建一个仅将环境的相关子集传递给递归eval调用的Scheme解释器 例如,考虑下面的表达式: (let ([x 1] [y 2]) (+ x 3)) 当我们计算(eval'(+x3)env)时,环境包含绑定{x:1,y:2}。如何编写一个高效的解释器,使环境只包含{x:1} 当然,通常我们无法事先知道是否要使用某个值。我要寻找的是一种可能基于编译器优化技术的粗略语法方法?-这比在每次递归调用eval时遍历大部分环境以过滤掉不相关的值更有效 (背景:我需要

Compiler construction 阵列访问模式的LLVM使用中的SCEV传递

我正在尝试使用LLVM在c代码中查找数组访问模式。我发现SCEV可以用于此目的,但尚未找到任何使用SCEV的示例代码。有没有关于如何使用scev确定阵列访问模式的想法 附言:SCEV代表标量评估你能详细解释一下“数组访问模式”是什么意思吗。LLVM中的SCEV过程用于识别循环()中的归纳变量,因此我不确定它是否是您需要的。在任何情况下,如果您发现确实需要它,您可以在LLVM本身中找到使用示例。例如在/lib/Analysis/DependenceAnalysis.cpp

Compiler construction 编译成机器代码的编译器是否需要在汇编中编写?

不包括将一种高级语言转换为另一种语言的编译器,任何编译成机器代码的编译器都需要用汇编语言编写吗?编译器的源代码不需要用汇编语言编写。例如,CPython编译器(技术上是解释器)的(很好的一部分)是用C编写的: 在一开始,在编译器出现之前,第一个编译器必须用汇编语言编写。但是后来有人用这个编译器来编译他们自己的编译器。然后其他人使用这个编译器来编译他们自己的编译器。等等等等 这就提出了“自举”的概念。引导编译器是用它打算编译的语言编写的编译器。CLAN编译器可以编译C++代码,但是编译器本身是用

Compiler construction 用两种不同编程语言编写的相同代码是否具有相同的二进制输出? 如果我想用两种不同的语言打印“hello”,比如C++和java,代码的二进制输出也可能不同…??p>

是的,代码的二进制输出是不同的 同样,当使用具有不同编译器选项的同一语言时,生成的输出可能不同(有/没有调试信息,有/没有优化) 以你为例: 在C++中,编译器生成用于直接执行CPU 的机器代码。 在java中,编译器生成字节码,该字节码将通过字节码解释器或jit(即时编译器)运行 但在等效程序中,程序输出应相同(在您的情况下,HELLO)。这取决于许多因素(源语言、目标平台、硬件、编译器标志、执行环境等) 编程语言规范通常描述语言结构和语义,而不深入实现细节,将其留给编译器供应商 有些语言

Compiler construction 如何在解释器中跟踪变量的索引

我正在创建一个解释器(一个字节码解释器,也是一个编译器),我发现了一个我无法解决的问题。我需要把变量存储在某个地方。将它们存储在字典中并在运行时查找它们可能会降低速度,因此我希望将它们存储在寄存器中,并使用它们的索引而不是名称 所以在编译时,我给每个变量一个索引,并创建一个寄存器数组。对于单一作用域语言来说,这很好。但是我为其创建解释器的语言有嵌套的作用域(和函数调用)。所以另一种方法可能是,我有一组全局寄存器,和一堆用于函数调用的寄存器列表。因此,我的虚拟机将具有以下内容: Register

Compiler construction 正在写入COFF对象文件。。。如何引用外部符号

我将要编写我的第一个编译器(好的……大部分工作都是使用ANTLR完成的,但它仍然需要努力)。。。我已经做了以下几件事: 为非常非常简单的计算实现了一个工作解释器(+、-、*、/、^-当然,具有适当的优先级,这并不难实现) 创建了一个基本的汇编代码发射器(这实际上比编写解释器要容易得多,因为我使用了一种相当简单的基于“堆栈”的方法来处理计算,比如:“push var1,push var2,add”——然后可以很容易地将其转换为简单的mov/add指令 能够汇编到.exe(使用ml64)并执行生成

Compiler construction PGI Flang github消失了

有人知道Flang或PGI/LLNL/Nvidia的Fortran for LLVM(而不是dragonegg)的去向吗?我在github页面上找到了一些不再存在的文档 看起来可能是你想要的,但它已经两年没有更新了。我在2016年11月的一份PDF演示文稿中发现,该演示文稿表明开发正在进行,但没有链接。看起来可能是您想要的,但两年内没有更新。我发现2016年11月的一份PDF演示文稿表明开发正在进行,但它没有链接。它没有去任何地方,只是还没有公开。我问了我们的FLANG团队,他们说应该在未来几个

Compiler construction 编译器:字符串常量与动态分配的字符串对象

我正在编写一个小型编译器,在处理字符串常量和字符串对象时遇到困难 以以下代码为例: s : String = "Hello world" 由于字符串在程序中,编译器将识别该字符串,并将生成一个字符串常量并将其放置在.data段中 然后,可以通过以下方式访问实际字符串: leaq string_const1(%rip), %rax addq $32, %rax 但是,如果我们要求用户输入字符串,则需要动态生成字符串对象。下面是字符串对象模板,它也位于.data段中 然后以后要访问实际字符串,我

Compiler construction postscript合并两条路径

我正在为我的编译器课程在postscript的基础上开发一种高级语言,我想创建两个函数:concatenate和union,这两个函数应该采用两条路径并连接它们。连接通过将第一条路径的端点连接到第二条路径的起点来工作。Union works不连接端点 玩了一段时间后,我成功地自动执行了这些操作。我在某些情况下得到了预期的结果,但在其他情况下没有。我将给出我的解决方案的具体例子,以及它们失败的地方 工作: 如果我想选择两条路径,一条是圆弧,另一条是连接三个点,我可以选择以下基本路径: newpa

Compiler construction 堆栈框架中是否有存储局部变量的符号表?

从逻辑上讲,我认为一定会有。如果我是正确的,我还假设它与全局符号表分离,并且它是在函数调用到达时由编译器创建的,在编译器到达被调用函数的末尾时被删除。我还假设在符号表中,变量位置将存储为相对于堆栈基指针的相对偏移量。出于好奇并参考所有符号表,是存储在符号表条目中的变量的显式长度,还是存储的变量类型(从中可以推断长度),或者两者都是?尽管每个项编译器的工作方式可能不同,包括调试器和符号表操作,一种可能的解决方案是使用AST树作为分层符号表 每个树节点存储一个符号,在某些情况下,例如函数,将从属符号

Compiler construction 有没有办法在AMD OpenCL内核中使用编译器展开循环?

我试图评估OpenCL for AMD和Nvidia GPU之间的性能差异。我有一个执行矩阵向量乘法的内核。目前我正在两个不同的系统上运行内核,我的笔记本电脑有一个NVidia GT525m和Ubuntu 12.04以及CUDA 4.0(其中包含OpenCL库和头文件),另一个是一个台式机,同样有AMD Radeon HD7970和Ubuntu 12.04以及最新的Catalyst驱动程序 在内核中,我有两个代码> > PraceMun-OrLoo/语句,这些语句为英伟达OpenCL实现(~6x

Compiler construction 没有昂贵的英特尔编译器,英特尔至强Phi是否可用?

要作为并行平台使用,是否需要编译器的许可证,或者是否有其他编译器?看看这个链接,英特尔网站声称很少有编译器可以使用它们,但我仍然无法让任何东西工作,这是一个工作过程。祝你好运 我可以在这里列出一些使用/获取英特尔编译器的选项……正如您所知,gcc没有配备用于此平台的矢量化代码 “英特尔编译器Linux*版”有一个非商业许可证,该许可证提供与商业/评估/学术许可证相同的支持英特尔至强Phi协处理器的英特尔开发工具,前提是请求者满足许可要求 对于可能需要执照支持课程/培训发展的学术机构,可获得1年免

上一页 1 2 ...  4   5   6   7    8   9   10  ... 下一页 最后一页 共 50 页