Compiler construction 你如何解释这个编译器/语法作业问题?

我正在做我的编译器作业,我有以下问题: 考虑以下语法: lexp->编号:(op-lexp-seq) op->+|-|* lexp seq->lexp seq lexp | lexp 可以将此语法视为以类似LISP=的前缀形式表示简单的整数算术表达式。例如,表达式34-3*42将被写入(-34(*3 42)) 法律用语(-2-3-4)和(-2)应作何解释?表达式(+2)和(2)如何* 现在,我真的不确定他们所说的“勇敢应该是什么”是什么意思。例如,他们是否需要派生 第一个似乎很简单: (-2

Compiler construction 这是F#编译器错误吗#2. 开放系统 Foo()类型= 接口Collections.IEnumerable与 成员x.GetEnumerator()=null 类型栏()= 接口Collections.IEnumerable与 成员x.GetEnumerator()=null 接口Collections.Generic.IEnumerable与 成员x.GetEnumerator()=null 设xs,ys=Foo(),Bar() 对于xsdo()/

中的x,我不这么认为,但这不是一条非常有用的错误消息。有关如何使用的详细信息,请参见规范的一节。。。在里面执行…表达式的计算。如果该类型实现了IEnumerable,则该模式将按预期工作。否则,编译器将查找具有正确签名的public(规范称为“accessible”)GetEnumerator方法并调用该方法。由于F#接口实现是显式的,因此如果不将Foo类型向上转换为IEnumerable,则无法使用GetEnumerator方法。如果执行向上转换,代码将再次按预期工作: open System

Compiler construction 编译器中的语法

如何生成将一种语法形式转换为另一种形式的规则 例如: 语法1: BLOCK: while ( id:=N) { BLOCK } | id:=N N: 1 | 2 | 3 | 4 | 5 语法2: BLOCK: while id:=N DO BLOCK END | id:=N N: 1 | 2 | 3 | 4 | 5 我想2生成一个翻译,这样我就可以将语法2中的一个语句翻译成语法1中相应的语句…嗯,创建一个解析器,将语法1中的一个句子转换成语法树,然后将语法树转换回语法2中的一个句子?创建了语

Compiler construction 编译器安装

两年前我开始学习两种计算机语言。但是有很多事情我正在努力去理解。例如,我想知道是否可以在没有安装操作系统的计算机上安装编译器(例如C编译器)?如果您没有操作系统。。你没有地方安装任何东西 如果您没有操作系统。。你没有地方安装任何东西 那么这样做的实际用途是什么? 我唯一能想到的是,如果你想把它嵌入到一些硬件中。 我认为这样做可能有点奇怪。除此之外,编译器应该编译代码。。那么,在没有操作系统的情况下,您将如何输入代码 那么这样做的实际用途是什么? 我唯一能想到的是,如果你想把它嵌入到一些硬件中。

Compiler construction 有任何工具或库来操作CUDA PTX代码吗?

我想知道是否有什么东西可以操作PTX,就像LLVM及其库可以操作LLVM IR一样简单。您的意思是影响编译器生成PTX的方式还是影响调整生成PTX的库?无论哪种情况,我都不认为有任何这样的工具可用 您可以使用asm关键字将内联PTX插入内核。您的问题不是很清楚。如果要从IR生成PTX,请查看CUDA LLVM编译器SDK:

Compiler construction 如何强制数组溢出?

我有一个非常奇怪的问题与波特兰组FORTRAN 90编译器有关。我试图运行一个依赖于数组溢出的代码来正常工作。我没有写这个代码!发起者必须使用标志“-tp=piii”来编译它,以迫使编译器避免进行击败数组溢出的优化。我想这是因为为旧P3编写的编译器太原始,无法完成这类工作。现在,当我尝试做同样的事情时,我得到消息“pgf90致命--tp piii在此安装中不受支持。”因此我不能做同样的事情 那么:pgf90在其默认操作中是否会破坏代码所需的数组溢出类型?和我一起工作的人显然认为是这样。如果有,是

Compiler construction Jasper报告-升级Jasper编译器-JasperCompileManager.compileReportToFile失败

我正在一个Java项目中(使用maven)使用jasper reports(版本4.0.1)。 我被要求将jasper编译器更新到最新版本,现在我们正在使用jasper编译器jdt,但我被要求使用与ireport相同的版本,我认为它是jdt-compiler-3.1.1.jar,对吗 但我有一些问题 它在maven respository中可用吗?我在那里找不到它。 我应该使用jdt-compiler-3.1.1.jar还是org.eclipse.jdt.core 我尝试使用这两种方法,但在尝试

Compiler construction 编译器中的类型检查

我目前正在尝试创建一个TypeChecker,它将成功地对MiniJava程序进行类型检查。在过去的10个小时里,我一直在研究它,盯着它看,但我甚至不知道从哪里开始。我已经放弃了按时完成这个项目,但我仍然想知道它是如何完成的。我们得到了MiniJava的完整解析器和一组用于遍历抽象语法树的类,以及两个不同的默认访问者DepthFirstVisitor和GJDepthFirst。我们应该扩大这些访客的范围以完成项目 我理解了需要做什么的基本概念:我们需要捕获解析器无法捕获的代码中的错误。我们需要在

Compiler construction 为什么编译器不能(总是?)优化已转到的代码?

我已经编写了一些PL/SQL程序,在这些程序中我发现GOTO很有用,比如跳出嵌套循环等等 我一直在想,在其他语言中使用gotos是否真的是个坏主意。 (例如C++)< /P> 我发现这些问题: 答案是:“编译器通常无法优化包含GOTO的代码。” 在另一个例子中:“但是,有可能生成一个gotos流图,而gotos不能由任何正常的流控制语句(循环、开关等)生成。” 有人告诉我这是goto邪恶,但没有人告诉我为什么,除了goto的代码读起来很恐怖。好吧,如果没有人学习、理解如何使用它们,因为它们是

Compiler construction MIPS编译器局部变量

我正在写一个tinyc编译器,它可以翻译成MIPS汇编。我一直在思考如何实现局部变量处理的问题。下面的示例很难找到合适的解决方案: int* funcA() { int a = 3; return &a; } int main() { return *(funcA()); } 通常,您会在堆栈上创建局部变量。因此,在这种情况下,将在堆栈上创建“int a”。问题是,最终我们希望返回'a'的地址,而不是带&a的值。但在我们离开“funcA()”的那一刻,我们将堆

Compiler construction 将类型检查器干净地转换为AST注释器

我正在用函数式编写编译器。类型检查器目前相当简单:它(大部分)只是一个从Expr到type的函数 现在,我想向工作流添加一个步骤,为以后的阶段保留类型信息。有很多方法可以做到这一点(符号表等),但一个简单的方法是将其转换为类似于AST但包含类型信息的IR。例如,如果AST数据类型为: datatype Expr = Literal of int | Add of Expr * Expr | ... 那么键入的IR将是: type TExp

Compiler construction 跟随集算法第三条规则的基本原理是什么?

对于compilers类,我们获得了以下查找以下(a)的规则: α 如果A是开始符号,则在(A)后面添加“$” 如果A->αBβ,则在(B)之后加上第一个(β){ε} 如果A->αB,或(A->αBβ和β*->),则将FOLLOW(A)添加到FOLLOW(B)中 我们还得到了以下(A)的非正式定义: 以句子形式紧跟在A后面的一组终端 为什么第三条规则是正确的 我知道如何应用第三条规则,但我不明白为什么一定是这样。有谁能提供一个需要使用它的具体例子,或者一个在没有第三条规则的情况下无法通过非正式定

Compiler construction 如果每种语言都是用其他语言写的,那么哪种语言在最下面?

我一直听说每种语言的编译器都是用其他语言设计的。例如,PHP的解释器是用C语言编写的,C++是用C语言编写的,JDK是用C/C++编写的。如果我没有错的话,那一定有一种共同的语言,这是所有人的共同语言。如果每个编译器的底部都有一种公共语言,那么该语言是什么?许多语言确实是用其他语言实现或编写的。然而,一种语言成熟的一个标志是它可以自己书写。这就是所谓的自举。欲了解更多信息,请参阅 Java被认为是一种自举语言。要从源代码构建Java,需要已经安装JDK。它确实依赖于主机操作系统中的本机组件来完成

Compiler construction BNF歧义

《编译器构造》一书给出了Algol 60原始定义的一个例子。它们包含歧义 找到至少两种不同的结构 IF a THEN b ELSE c=d 这是定义的一部分 unconditional Statement = basicStatement | forStatement | compoundStatement | ... . ifStatement = "IF" BooleanExpression "THEN" unconditionalStatement. conditionalStateme

Compiler construction wxwidgets setup.h“;“没有此类文件”;

谷歌对这个问题的快速搜索表明,这是很普遍的,我一生都无法找到解决方案 我直接从wxWidgets网站上安装了适用于Windows的wxWidgets 2.8.8 每当我尝试编译任何东西(例如“wxWidgets的第一个程序”中描述的示例应用程序)时,我都会得到: wx/setup.h:没有这样的文件或目录 我已经在编译器搜索列表中包括了C:\wxWidgets-2.8.8\include和C:\wxWidgets-2.8.8\include\wx 应该很简单,但事实并非如此( 如果我尝试使用与w

Compiler construction 将汇编语言编译成机器代码将涉及哪些阶段

我正在尝试编写一个编译器,以获取一个汇编器文件,该文件将输出原始机器代码指令 我已经找到了很多关于如何编写编译器的教程,但是我想知道是否所有的阶段都与汇编程序助记符有关。例如,对于汇编程序的简化逐级格式,词法分析是否有必要,还是仍然有必要,但采用更简单的格式?在我看来,词法分析是所需的全部,由于汇编的扁平结构,对解析器的需求减少了。仍然需要词法分析器:您必须有能够将文本分解为单个标记(单词、数字、标点符号等)的工具。您仍然需要一个解析器,尽管它非常简化。毕竟是有语法的。首先,我会检查是否有无效的

Compiler construction 为什么使用整数作为标记?

现在使用数字识别代币有什么好的理由吗?我正在制作一个编译器 作者给出的代码如下: public class Token { public final static int ID = 0, FLTDCL = 1, INTDCL = 2, PRINT = 3, ASSIGN = 4, PLUS = 5, MINUS = 6, EOF = 7, INUM = 8, FNUM = 9; public final static String[] token2str

Compiler construction 非类型Lambda演算的函数语言

是否有用于非类型化lambda演算的解释器(或编译器)?(根据它是可能的。)我认识到它作为一种编程语言没有什么用处,特别是如果大部分语言(如数字和布尔运算符)都是(由用户或库)在语言本身中实现的。然而,我仍然认为这将是一个有趣的工具,有助于学习和探索微积分。对于这一点,解释器比编译器更可取,尽管两者都可以工作。有人知道这样的程序吗?使用一些技巧,这几乎可以在任何函数式语言中实现。至少我在Haskell和OCaml中看到过类似的情况。然而,有时您必须绕过类型系统的限制。通常,通过将“非类型化”特性

Compiler construction 为CLR实现函数语言(或关于F#实现的论文)

有人知道关于F#编译器实现的好论文吗?我试图为一种简单的函数式语言生成针对CLR的CIL代码,但我在几个方面遇到了困难 函数式语言和CIL之间的差异使得生成类型良好的CIL代码变得困难。我有通过类型擦除工作的解决方案,但我更愿意找到一种方法来生成反映(至少在某种程度上)源语言的Hindley-Milner类型系统的CIL代码(例如,通过生成泛型类)。从MS和Mono F#编译器生成的代码来看,他们完全做到了这一点 关于F#的实现的学术论文并不多——尽管编译器是开源的,所以如果您想了解一些具体细节

Compiler construction ios5 ARC从ARC中排除文件的编译器标志是什么?

有人能帮我记住是什么标志告诉XCode不要对某些文件使用ARC吗?我的项目中有几个文件被标记为。。。直到我添加了另一个文件并决定将其转换为ARC。听起来很简单,对吧?我希望我能够简单地检查一个我想要的文件,并让XCode发挥它的魔力。嗯,不那么容易,在预检查期间,它从文件中剥离了所有Noarc标志,现在我需要手动将标志重新应用于几个文件 这个故事的寓意是:一旦您的项目处于ARC中,并且您有一些文件被标记为无ARC,不要从重构>转换为ARC重新运行转换为ARC工具。即使预检查失败,它也不会恢复您的

Compiler construction 编译器合并源代码时的阶段

在进行语义分析(包括类型检查)之前,我想让整个程序(通过抽象语法树或其他方式表示)都完成是很重要的 为了将所有信息放在一起,您必须将源文件、引用库的元信息等组合在一起 这个组合阶段叫什么,因为“链接”通常指的是将编译器生成的内容组合在一起,而不是输入文件和导入的库。编译器通常将单个源文件编译成单个目标文件 源文件不一定一次全部加载到内存中。对象文件只有在链接后才会合并 要进行类型检查(除其他外),编译器需要知道此编译单元引用其他单元的所有方式。在C/C++中,这是通过预处理器中包含的头文件实现的

Compiler construction 对浮点数的文本进行分析得到零

我使用下面的lex文件将数字转换为令牌。但是,该程序无法正确解析浮点数。为了进行调试,我添加了printf语句,它们表明strtof函数无法正确解析数字。因此,如果输入4.2,则输出为0 %{ #include <stdlib.h> void yyerror(char *); #include "y.tab.h" char *p = NULL; %} %% [0-9]+\.[0-9]+ { printf("%s", yytext);

Compiler construction 使用逻辑编程进行优化的语言

是否有使用任意逻辑编程执行编译时优化的语言 我正在寻找一种语言的示例,它将使您能够执行以下操作: 定义任意谓词,例如,是幂等的? 如果是幂等的,告诉编译器f(f(x))等于f(x) 为各种函数指定是幂等的?(可能是间接的,例如由其他逻辑语句暗示) 让编译器根据其知道的谓词/优化执行优化 我想你想要的是一份工作 这些可以让您定义应用于源代码的规则,例如用于优化代码的algrebraic法则 你会发现有各种各样的问题。第一个是在langauges中处理范围规则和副作用。第二个是转换的顺序;它们的应

Compiler construction 用clang提取符号表

我正在寻找一种获得C程序符号表的方法。 我正在寻找全局变量和局部变量,以及它们的范围等 clang是否有选项或API来转储此信息? 或者任何其他的编译器框架,使之易于实现。我确信Clang有一组接口来提供对符号表信息的访问。我的理解是没有太多的文档,所以您只需检查源代码 对顶级定义执行此操作。它不报告函数的内容(例如,您不太可能获得局部变量)。你得到了XML,然后你就可以独立了 我们的DMS软件再工程工具包具有各种C语言的完整解析器,并构建符号表。如果您想转储它们,[IMHO]符号表api提供了

Compiler construction 阶段SBCL编译器

我找不到任何描述SBCL编译器各个阶段的源代码。哪些资源(例如论文)描述了SBCL编译器的这些阶段?Phil Khoung的文章很好地描述了如何开始使用SBCL内部构件。在关于编译器的一节中,他写道 查找编译器所在的位置 编译器本身的工作要多一些。我认为最好的方法是进入src/compiler/main.lisp并查找compile组件ir1阶段在组件上循环并执行高级优化,直到定点(或者我们厌倦了等待),而%编译组件处理到IR2然后到机器代码的转换。自编写Python论文以来,编译管道并没有真正

Compiler construction 对于‘;yylval’;

编译lex程序时,出现一个错误: “yylval”的冲突类型 外部YYSTYPE*yylval 你知道怎么纠正这个吗? 这是法律法规 %{ #include<stdio.h> #include"y.tab.h" extern char *yylval; %} %% "int"|"float"|"char"|"double" { yylval=strdup(yytext); return TYP;} [a-z A-Z][a-z A-Z 0-9]* { yylval=s

Compiler construction 将一种高级语言翻译成另一种高级语言

我基本上想创造我自己的语言。但是我不想把一种高级语言编译成一种低级语言,我只想把我的语言翻译成另一种高级语言 我首先看了一下,但这些教程似乎假设您想将一种高级语言编译成汇编语言,但我只想将一种语言翻译成另一种语言 因为我也知道我看过的Haskell,但这似乎更像是用Haskell编写的scheme解释器 我又搜索了一点,找到了,但我不想添加任何语言功能,我只是想更改语法 如果我想把一种语言翻译成另一种语言,从哪里开始 一个 每个编译器教程对我想要完成的任务都有帮助吗 解决 有什么工具可以帮助我吗

Compiler construction gfortran包含带有空格的路径

我的目录中有一个空格,当我尝试使用-Idir编译器选项时,它无法识别路径(因为有空格)。这有什么办法吗?或者我应该重命名我的路径 这有什么办法吗 你是否引用了带有空格的路径?您必须:“-Idir加空格”(此处需要单引号或双引号) 或者我应该重命名我的路径 避免带有空格的路径可能是最好的解决方案。引号确实有效,但格式似乎是-I“dir\u with\u spaces”

Compiler construction 堆垛机中的临时处理

我一直试图理解MIPS堆栈机的代码生成,其中有一个累加器寄存器用于存储操作结果,指令的第二个操作数必须从堆栈中弹出。 大多数讲座和视频似乎都在讨论像这样的指令序列x+(y+z),然后继续解释如何将x推到堆栈,然后y跟随我的加载z到累加器。。。诸如此类 然而,我对这个场景有点困惑。 假设在下面的代码中没有像常量折叠这样的优化 A = 2 + 3 X = 1 + 1 .... // More random instructions B = 4 + 5 C = A + 2 D = B + 1 E =

Compiler construction 导出C/C++开关/案例跳转表信息

在x86-64上的C/C++中,如果switch/case语句相对大于3或4个条目,则LLVM将生成一个跳转表,而不是条件跳转指令 在Clang/LLVM中,如何导出这些表的基、索引和比例信息?程序源代码可用 比如说, jmpq*0x400000,%rbx,8 如何导出基准0x400000、将与%rbx中的值进行比较的索引值以及刻度8?为什么需要在Clang/LLVM中手动处理此问题?它已经以类似的方式处理switch/case语句。我的意思是将这些信息导出以供其他用途,而不是更改或添加LLVM

Compiler construction 获取语法列表

我正在尝试构建一个编译器,现在我完全不知所措。我有一个主类,希望能够通过继承声明其他类,即classnewclass扩展在{}我的输入看起来像 input: class_main class_list { /* New program created */ } 我的class\u列表包含我程序中的所有类,它也可以为空 一个简单的类声明如下: class_decl: CLASS_KWORD CLASS_ID OPENCURLYBRACE

Compiler construction A-0系统还是短代码,哪个先到?

我在很多地方读到过A-0系统编译器是第一位的,但我发现了一本书《二十世纪的计算史》,书中说William Schmitt在1949年实现了短代码。我一直听说Grace Hopper是第一个编写编译器的人,但那是在1952年。那么,哪个先来 看起来像,但它更接近于解释器而不是编译器。大约在一年后推出,它比短代码更接近现代编译器。非常感谢,你不会相信我花了多长时间才找到这个问题的答案。

Compiler construction 排列lex和解析文件的过程方法是什么?

我搜索了很多,但似乎仍然无法掌握工作流程,以及令牌、lexer和解析器的文件安排。我正在Visual Studio中使用纯C。通过无数的教程,他们似乎跳过了这一部分 因此,当您在source.txt中编写一个简单函数时,lexer位于C文件中,读取源文件,并将简单函数分解为令牌 在Dobbs博士的书中,有一个文件包含写入def文件的已定义令牌的列表,如果前面的问题为真,那么该预定义令牌列表适用于哪里 一旦源文件被lex读取,并且标记被拆分,解析器如何检索出lex正在输出的标记化信息,然后生成语法

Compiler construction 传输/代码生成-变量声明问题

我最近一直在研究ANTLR和Java,我构建了一个简单的语法来解析这些代码并生成AST。我还编写了一个内置的解释器来执行这段代码,它似乎工作得很好: 关于我的玩具语言的一些注释: 我的语言只有一种“double” 所有变量都在赋值时隐式声明 所有变量都具有全局范围。也就是说,我可以在分配变量后使用变量,即使在分配该变量的块之外 /*示例程序*/ 开始 j:=1; 而在一般情况下,在分配前检测使用是不可能的。考虑以下(不是很好)C代码: int-sum;/*未初始化*/ 对于(i=0;i

Compiler construction 将方案转换为CPS实现去糖呼叫/cc

背景: 我目前正在编写一个小型的scheme编译器,采用的方法是首先转换为管理规范形式,然后转换为cps(我发现这是最容易理解的,因为它们的工作有明显的区别) 问题是: CPS仅对非基本体使用连续体,而不对基本体使用连续体。我真的不明白这与能够正确地进行desugar call/cc之类的操作之间的联系。仅仅为每个call/cc创建一个lambda就足够了,它代表了延续吗?为什么我们对所有的非原始人都使用连续体/我是否错误地认为CPS是能够取消呼叫/cc的必要条件 例如: (+ 2 (call/

Compiler construction Bison解析器在编译时崩溃,报告“;错误1“;

我的bison构建在编译时失败,没有太多信息 上面写着:error:shift/reduce conflications:1发现,0预期,但据我所知,野牛通常可以容忍 错误归结为第二个if productionif LPAREN expression RPAREN语句ELSE语句。 一旦我添加了这些,它就会在编译时崩溃 谢谢你的意见 %start translation_unit %% translation_unit : external_declaration |

Compiler construction 被调用方是否在调用方传递已用寄存器的情况下保存?

在编译器设计中,为什么调用方不能将其已用寄存器列表(在调用方保存协议的情况下会推送)传递给被调用方,而不是使用调用方或被调用方寄存器保存协议,以便被调用方可以将其已用寄存器列表与调用方使用的寄存器进行比较。然后,只有真正需要推送的寄存器才会被推送。我遗漏了什么吗?效率很低。。。您将需要解析列表(对于每个函数!),这是完全不必要的。这是一个有趣的想法。我认为有两件事使它不那么吸引人: 无论如何,被调用方必须为最坏的情况保留堆栈空间 为了提高效率,您需要一次存储和加载寄存器集的特殊指令。摩托罗拉6

Compiler construction 哪些通用编程语言/实现编译为C

我目前正在使用Eiffel(SmarteFil/ISE-Eiffel),它正在编译成c 我发现,如果将输出转换为可移植的assember语言(也称为C),那么使用新的特性或工具支持自己扩展该语言要容易得多 哪种通用的、非函数式的语言也具有这种特性 我知道有过时的C++预编译器,我甚至找到了一个旧的Objul-C.< (我也听说过((Scheme和Lisp)编译器),但我不喜欢这种(语言)) 请只列出FOSS(免费开放源码)项目,因为我需要研究它们。,一种类似于C语言的语言,它是Gnome项目的一

Compiler construction 如何找到一些代码来检测代码打包器?

我想检查打包机或编译器生成的大量执行文件(*.exe) 因此,我需要一个库或类似的东西,可以告诉我巫婆编译器或打包机已经制作了*.exe文件 我试过exeinfo,但它让我等了很多分钟,因为它一个接一个地工作 是否有任何程序或库来处理这些问题。是您的最佳选择 如果需要“库”,可以创建一个使用提供的签名文件的脚本。我想我在不久前的一个博客上看到了一个python脚本,它确实做到了这一点,但是我丢失了链接

Compiler construction 如何将app.config文件包含在fsc.exe(F#)或csc.exe(C#)中?

我有一个控制台应用程序,它使用app.config文件,但是我不知道如何将其包含在命令行参数中,以便在使用fsc.exe以编程方式编译时,输出将创建Program.exe.config。现在我的解决方法是将app.config重命名为Program.exe.config,并将其复制到与Program.exe相同的输出位置。我需要的是fsc.exe命令行参数来执行此操作,但是我怀疑csc.exe将具有与fsc.exe相同或非常接近的功能,因此如果您知道它在csc.exe中是什么,我将尝试它 Bob

Compiler construction 编译器如何处理运行时错误消息中的行号

几乎所有编译器都会返回一个行号和错误消息。我想知道,从编译器设计的角度来看,编译器是如何处理以下不同阶段的行号消息的?谢谢 扫描器 分析器 AST数据结构 代码生成 此外: 运行时环境 机器翻译 我已经为我的类分配实现了一个相当简单的编译器。它是Pascal的一个子集,还有一些其他限制 编译器是一种将一种语言翻译成另一种语言的工具。它通过执行错误检查来实现这一点,然后生成输出代码(如果可能)。通常,编译器的管道大致相当于: 输入代码->词法分析器(扫描器)->语法分析器->语义 分析器->

Compiler construction “定义令牌”;“整数矩阵”;灵活的

我试图在flex中定义两个标记。第一个返回“tINTTYPE”,当它在输入中看到字符串“int”时返回,另一个返回“tINTTYPE”,当它在输入中看到“int matrix”时返回 以下是我的flx文件的相关部分: int {yylval.type_id.Type=1;return tINTTYPE;} int[ \t\n]+matrix {yylval.type_id.Type=2;return tINTMATRIXTYPE;} . return yytext[0]; 问题是,当输入是i

Compiler construction 编译器RT调用的目的和来源是什么?

我想了解以下关于LLVM编译器RT项目的情况:它是从哪个程序调用的。据我所知,编译器RT是一个函数集合,用于处理LLVM中的指令,这些指令实际上没有硬件对应项(还有比这更重要的吗?)。所以,如果我在LLVM中使用除法,它应该被一个适当的编译器RT函数替换。首先,如果这不正确,请纠正我 其次,我很好奇是谁生成了编译器RT用法。它是叮当的还是直接的LLVM。我可以为LLVM编写一个不同的前端吗?LLVM会在适当的时候自动处理编译器RT的使用吗?您的两个断言都是正确的。LLVM后端必须将LLVM IR

Compiler construction VHDL ALU合成期间的进位输出问题

我正试图用VHDL构建和合成一个ALU,但我一合成就遇到了问题。 我希望我的ALU有一个操作码,用于将两个N位输入和一个进位相加,进位可以由一个输入设置,也可以由前面计算的和设置。 我感兴趣的代码部分如下: process (a, b, op) -- a and b are n bits input en op is the op-code case op is when "011" => -- add a + b + c (with c as carry)

Compiler construction 什么定义了如何将AST转换为目标语言

AST的结构由句法语法定义。我想知道是什么定义了AST应该如何转换成目标语言。它是目标语言的句法语法吗 AST的结构由句法语法定义 有点。解析树(或具体语法树)直接对应于语法的结构。抽象语法树是解析树的抽象,它省略了不相关的部分。什么是无关的,什么不是无关的,也取决于语言的语义 例如,在大多数语言的大多数实现中,表达式(x)和x产生相同的AST,但根据语言的语义,只有当这两个表达式相等时,才能这样做。例如,在Lisp中,(x)将是函数x的函数调用,而x将是变量x的访问。这是一个不同语义导致不同A

  1    2   3   4   5   6  ... 下一页 最后一页 共 48 页