精华内容
下载资源
问答
  • 如何学习编译原理

    2016-09-09 17:19:00
    我觉得对普通的程序员来说,编译原理里面实际用途的,是parser和codegen,但是因为这两个领域,到了2016年都没什么好研究的了,而且也被搞PLT的人所鄙视,所以你们看到的那些经典的教材,都没有好好讲。...
    我觉得对普通的程序员来说,编译原理里面有实际用途的,是parser和codegen,但是因为这两个领域,到了2016年都没什么好研究的了,而且也被搞PLT的人所鄙视,所以你们看到的那些经典的教材,都没有好好讲。

    在这里我隆重推荐,一行代码、一句公式都没有,但是却什么都讲明白了的:《Parsing Techniques》。第一版官网免费下载,第二版多出来的东西你们用不上不用看了。全书只讲parsing,没有后端的任何废话(逃

    人们可能会说,现在做parser的工具这么多,学这些有用吗?当然有用。数据结构都被封装好了,你们不还是要学过一遍,才能把别人的库用得高效。做parser也一样,没有受过训练的人,很容易语法总结成屎,或者因为想象力不够而无法实现自己的需求。

    至于要是哪天真的需要做后端了,多半还是随便看点资料(如Engineering a Compiler),知道点优化的概念和架构的知识,然后直接用LLVM干了。

    转载于:https://www.cnblogs.com/linbolinbo/p/5857387.html

    展开全文
  • 编译原理 学习总结

    2018-06-20 10:05:10
    我们将程序高级语言写出来通过编译程序将其翻译为机器能识别的语言从而执行,编译原理可由一张图可以概括。高级语言如何转换为机器能识别的机器语言大致要经过五个过程。1.代码要起到什么作用,可以通过分析其成分...

    编译原理介绍编译程序构造的原理与方法,了解编译程序是如何运行。我们将程序用高级语言写出来通过编译程序将其翻译为机器能识别的语言从而执行,编译原理可由一张图可以概括。


    高级语言如何转换为机器能识别的机器语言大致要经过五个过程。

    1.代码要起到什么作用,可以通过分析其成分来得出其作用。于是第一阶段就是识别单词,将单词分类以便后续处理。但高级语言有多种,每种有其自己的特色,也不尽相同。我觉得这也是文法的由来。文法用来描述语言,但语言的又有区分,从而有文法的分类与不同。最好的是0型文法。但符合这样文法的语言不多,这也是不同编译程序产生的原因。有了文法就可以识别单词是否符合该文法。理解编译程序如何运行就可通过语法分析树。

    2.词法分析是将句子里的单词识别并判断其组合是否符合文法结构。主要介绍了词法分析器的设计,介绍了正规式与正规文法,有限状态自动机,有限状态自动机之间的转换,正规文法与有限状态自动机之间的转换。

    3.语法分析是将有词法分析传递过来的结果进行处理分析,判断是否符合语法要求。分为自上而下分析与自下而上分析,自上而下分析主要讲了LL(1)分析法。运用消除左递归,first集,follow集,预测分析表。自下而上分析讲了两种方法——算符优先与LR分析法。算符优先介绍了算符优先文法,及其判定,算法优先表。LR分析法介绍LR(0)项目族集,与分析表的构造。SLR分析表与LR(1)分析表。

    4.当句子符合语法后,还要判断其语义问题。包含属性文法与语法制导翻译,综合属性,继承属性,S-属性文法及计算,L-文法及翻译,依赖图,遍历。

    5.符合语义后即可产生中间代码,中间代码的表示,逆波兰式,图表示法,三地址代码。运用这些对赋值,控制,说明,布尔表达式••••••语句进行翻译,主要是运用四元式,涉及回填。

    编译原理的学习已经告一段落。感觉自己学的挺不错的,但考试结果却不尽人意,感觉自己平时下的功夫还不到,有些地方学的不尽人意,在考试中就体现出来。还是应该多花功夫去学习,如果学好的话,是不是就可以做出一个编译器啦,哈哈!

    展开全文
  • 编译原理

    2016-09-09 17:26:00
    编译原理是什么?  编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法... 学习编译原理有什么好处?  可以语法分析来分析...

      编译原理是什么?

      编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。

      学习编译原理有什么好处?

      可以用语法分析来分析出一段用户上传是否含有代码,从而让你的网站更健壮。分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入。在业务软件中结算方面允许用户输入条件表达式和四则运算,允许用户自定义结算公式或条件,使软件上一个档次。甚至可以实现自己创造的编程语言,以后编程全用自语言来做,然后编译成老板要的那种语言。有的公司要JAVA,有的公司要C#,C++,VB等等你都不必每样都费心了。

      不学编译原理有什么损失?

      不学编译原理,可能永远给各种写编译器的人当奴隶,以为写程序只能按照他们设计的语言哲学来做。学好了编译原理,不一定非要自己写语言,但是至少能把很多其他程序员觉得很酷的东西看得透彻一点,不会被程序语言的设计表象骗到太多。这个还是挺重要的,是一辈子码工和未来CTO的区别,损失自己算吧……  

      如何学习编译原理?

      做好思想准备,不要畏难,书一遍没看懂没关系,要多看几遍,甚至几十遍,不是有句话么:书读百遍,其义自见;还要结合课本后面的习题多做思考和类比,这些都是最基本的办法,在学习的过程中归纳出自己的难点和疑惑点,然后重点突破;自己动手做一个虚拟机,在虚拟机的基础上开发自己的语言和编译器,加强实践,当然并不需要你把这些做的多么复杂,主要目的还是为了结合理论的学习,是为了更加深刻的理解书本上那些抽象的东西;但是谁又敢说,你不能由此发明了将来流行世界的新的语言和新的编译器呢?在了解了本篇文章所说的东西后,可以直接专注于编码(Lex,Yacc等)的研究,然后去配合理论的学习,可以在第一次学习的过程中忽略一些内容,等以后用的时候再来学习.

    转载于:https://www.cnblogs.com/hano/p/5857431.html

    展开全文
  • 编译原理学习总结

    千次阅读 2018-06-12 11:21:41
    一,什么编译程序?编译器就是一个程序,它读入某种语言编写的源程序,并翻译成一个与之等价的另一种语言编写的源程序。编译程序的工作,从输入源程序开始,到输出目标程序结束,与自然语言之间的翻译很多...
      
    

    一,什么叫编译程序?

    编译器就是一个程序,它读入用某种语言编写的源程序,并翻译成一个与之等价的另一种语言编写的源程序。

    编译程序的工作,从输入源程序开始,到输出目标程序结束,与自然语言之间的翻译有很多相似之处:

    一段英文翻译成中文,需经下列步骤:

    I am a  hard-working student.

    识别出句子中的单词->词法分析
    分析句子的语法结构->语法分析
    根据句子的含义进行初步分析->语义分析及中间代码生成

    对译文进行修饰->代码优化

    写出最后的译文->目标代码生成


    1词法分析
    读入源程序 识别出单词 并用记号方式表示识别出的单词
    2语法分析
    在词法分析的基础上,根据语言的语法规则,把单词符号串组成各类语法单位.即在单词流的基础上建立一个层次结构-----建立语法树
    3语义分析阶段
    语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作信息及类型信息
    4中间代码生成阶段

    这种中间表示可以看成是某种抽象的程序,通常是与平台无关的
    要易于产生,而且便于翻译成目标程序

    编译各阶段的分组
    前端和后端:

    前端包括词法分析、词法分析、语义分析,以及相关的错误处理和符号表的建立,依赖于源程序并在很大程度上独立于目标机器。

    后端主要包括代码优化、代码生成和相关错误处理。依赖于目标机器。

    后端处理对象是由前端产生的结果,即中间代码。
    遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标程序。



    二,高级语言及其语法描述

    程序语言包括语法和语义。

    高级语言的特性包括分类、程序结构、数据类型与操作、语句与控制结构等。

    程序语言的语法描述是重点:

    1,上下文无关文法

    文法是描述语言的语法结构的形式规则。

    它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。

    一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。
    形式上定义一个上下文无关文法G是一个四元式
    (VT,VN,S,P):

    VT是一个非空有限集,它的每一个元素称为终结符号;
    VN是一个非空有限集,它的每一个元素称为非终结符号,
      VT∩VN=空集;
    S是一个非终结符号,称为开始符号;
    P是一个产生式(有限)集合,每个产生式形式是A→α,其中,P∈VN,α ∈( VT∪VN)*
    开始符号S至少必须在某一产生式的左部出现一次。

    最左(最右)推导:在推导的任何一步αβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换
    2,语法分析树和二义性

    语法树的根结由开始符号所标记;随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。
    在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。


    如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
    3,形式语言分类


    三,词法分析

    从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为由单词符号串组成的程序。
    词法分析器输出的单词符号常常用二元式来表示:<单词种别,单词符号的属性值>
    词法分析器的设计上,巧妙的是超前搜索和状态转换图。

    正规表达式与有限自动机:

    重点是以下过程:

    1把句子表示成正规式

    2 把正规表达式表示成状态图即NFA


    3 由状态转换矩阵得DFA

    4对DFA进行化简

    ①对M的状态集S进行划分:
     把S的终态和非终态分开,分成终态集合非终态集,形成基本分划П,显然这两个子集是可区别的。
    ②假定到某个时候П含有m个子集,
       记П={I(1),I(2),… I(m)}
     并且,属于不同子集的状态是可区别的。
     检查П中的每个I(i)看能否进一步划分:
     对于某个I(i)
       另I(i)={q1 ,q2 ,…,qk}
     若存在一个输入字符a使得I(i)a不全包含在现行П的某个子集I(j)中,就将I(i)一分为二
    ③一般地,若I(i)a落入现行П中N个不同子集,则应将I(i)划分为N个不相交的组,使得每个组J的Ja都落入П的同一子集,这样再形成新的分划
    ④重复上述过程,直至分划中所含的子集数不再增长为止。至此,П中的每个子集已不可再分。也就是说,每个子集中的状态是互相等价的,而不同子集中的状态则是互相可区别的。

    ⑤经过上述过程后,得到一个最后分划П.对于这个П中的每个子集,选取子集中的一个状态代表其它状态。


    四,语法分析-自上而下分析法

    它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。
    从文法的起始符出发进行句子的推导,即自上而下的分析;从句子本身出发,进行归约,看能否把句子规约为到起始符,即自下而上的规约
    自上而下分析面临的问题:
    文法的左递归问题,回溯的不确定性,虚假匹配的问题,不能准确地确定输入串中出错的位置
    LL(1)分析法:

    1,消除左递归

    设有产生式 
       P→Pα|β  (1)
     其中β不以P开头,α不为ε。那么,我们可以把P的规则改为如下的非直接左递归形式:
       P→βP’
       P’→αP’|ε (2)
    2,判断LL(1)文法

    (1)文法不含左递归
     (2)对于文法中每一个非终结符A的各个产生式的候选式的FIRST集两两不相交。即,若
       A→α1|α2|…|αn
      则 FIRST(αi)∩FIRST(αj)=Φ (i≠j)
     (3)对于文法中的每个非终结符A,若它的某个候选首符集包含ε,则
       FIRST(A)∩FOLLOW(A)=Φ
    3,预测分析程序

    构造预测分析表:

    求出每个非终结符的FIRST集和FOLLOW集

    对文法G的每个产生式, A->α,进行下面的处理
    对每个终结符a,如果a属于FIRST(α),则把该产生式写入到M[A,a]
    若ε属于FIRST(α),则对任何b属于FOLLOW(A), 把该产生式加入到M[A,b]
    所有无定义的M[A,a]标上出错标志

    五,语法分析-自下而上分析
    自下而上分析的基本问题:

    1,基本思想
     用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。

    2,规范归约
    定义:假定是文法G的一个句子,我们称序列
           αn, αn-1,... α0
       是α的一个规范归约,如果此序列满足:
      (1)  αn= α
      (2)  α0为文法的开始符号,即α0=S
      (3)  对任何i,0 < i <= n, αi-1是从αi经把句柄替换成为相应产生式左部符号而得到的

    3,自下而上的语法分析是使用符号栈的,同时规约过程可在语法树中体现。

    算符优先分析法:
    一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
    …QR…则我们称该文法为算符文法。

    构造算符优先表:

    (1)通过检查产生式的每一个候选式可以找出满足a=.b
      (即P→…ab…或P→…aQb…的产生式)
    (2)为了满足<.和>.,需对G中每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P)

    (3)构造集合FIRSTVT(P)的算法
     按其定义,可用下面两条规则来构造集合FIRSTVT(P):

     ① 若有产生式P→a…或P→Qa…,
      则a∈FIRSTVT(P);

     ② 若aFIRSTVT(Q),且有产生式P→Q…,
      则a∈FIRSTVT(P)。

    (4)同理构造构造集合LASTVT(P)的算法
     按其定义,可用下面两条规则来构造集合LASTVT(P):

     ① 若有产生式P→… a或P→… aQ ,
      则a LASTVT(P);

     ② 若a∈LASTVT(Q),且有产生式P→… Q ,
      则a∈ LASTVT(P)。
    (5)有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系<.和>.的所有终结符对。
    (1)假定有个产生式的一个候选形为
    …aP…
      那么,对任何b∈FIRSTVT(P),有a <. b。
    (2)假定有个产生式的一个候选形为
    …Pb…
      那么,对任何a∈LASTVT(P),有a >. b。

    LR分析方法:


    1,构造LR(0)项目族集:

    构造G的拓广文法G’;

    构造I的闭包CLOSURE(I):(1)  I的任何项目都属于CLOSURE(I);
    (2)  若A→·B属于CLOSURE(I),那么,对任何关于B的产生式B→的项目B→·也属于CLOSURE(I);
    (3)  重复执行上述两步骤直至CLOSURE(I) 不再增大为止


    转换函数:定义转换函数如下:
     GOTO(I,X)=CLOSURE(J)其中:
     I为包含某一项目集的状态,
     X为一文法符号,
     J={任何形如A→X•的项目|A→•X属于I}。

    再由转换函数建立状态之间的连接关系得到识别活前缀的DFA。

    2.构造LR(0)分析表:

    a)若项目A→•a属于Ik,且转换函数GO(Ik,a)=Ij,当a为终结符时 ,则置ACTION[k,a]为Sj。
      b)若项目A→•属于Ik, 则对a为任何终结符或#′,置ACTION[k,a]=rj, j为产生式在文法G′中的编号。
     c)若GO(Ik,A)=Ij,则置GOTO[k,A]=j,其中A为非终结符,j为某一状态号。
     d)若项目S′→S•属于Ik,则置ACTION[k,#]= acc。
      e)其它填上“报错标志”。

    3.根据LR(0)分析表的分析方法:

    <1>. 移进 
     把(s,a)的下一状态s’=GOTO[s,a] 和输入符号a推进栈,下一输入符号变成现行输入符号.
    <2>. 归约 
     指用某产生式A进行归约.  假若的长度为r, 归约动作是A, 去除栈顶r个项,使状态sm-r变成栈顶状态,然后把(sm-r, A)的下一状态s’=GOTO[sm-r, A]和文法符号A推进栈.
    <3>. 接受  宣布分析成功,停止分析器工作。
    <4>. 报错  发现源程序含有错误,调用出错处理程序
    SLR分析方法:

    思想:大多数程序设计语言的文法不能满足 LR(0)文法的条件,即其规范族中会有含有冲突的项目集(状态)。对于有冲突的状态,向前查看一个符号,以确定采用的动作。

    各分析方法的分析表构造方法类似

    六,属性文法和语法制导翻译

    属性文法的属性分为综合属性和继承属性。

    基于属性文法的处理方法:

    主要掌握依赖图和抽象语法树。

    L-属性文法和自顶向下翻译:

    翻译模式设计:(1)只需要综合属性的情况
    为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。

    (2)既有综合属性又有继承属性的情况
    ①产生式右边的符号的继承属性必须在这个符号以前的动作中计算出来。
    ②一个动作不能引用这个动作右边符号的综合属性。
    ③产生式左边非终结符号的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的未尾。
    七,语义分析和中间代码产生

    中间语言的几种形式:逆波兰式、DAG图法、抽象语法树、三地址码(四元式、三元式、间接三元式)。

    语句翻译成四元式:

    1,数组元素的表达:

    数组元素的地址计算公式
               若数组A的元素存放在一片连续单元里,则可以较容易的访问数组的每个元素。假定数组的每个元素的宽度为w,则一维数组A[i] 这个元素的起始地址为:
                                base + (i – low)*w
                其中,low为数组下标的下界, base是分配给数组的相对地址,即base为A的第一个元素A[low]的相对地址。
            base + (i – low)*w   可整理为:  i*w + (base –low*w)
    若二维数组A按行存放,则可用如下公式计算A[i1,i2]的相对地址:
        base + (( i1 – l1)*d2 + i2 – l2) *w
        其中,l1、l2分别为i1、i2的下界;di界差。若ui为i的上界,则di=ui – li +1.
    假定i1,i2是编译时唯一尚未知道的值,我们可以重写上述表达式为:( base –( (l1 *d2) + l2) *w)+ ( (i1*d2) + i2) *w

    ,2,布尔表达式的翻译:
    A∨B  可理解为 if A then true else B
          A∧B  可理解为 if A then B else false
          ┐A   可理解为 if A then false else true
    (jnz,a,--,p)  表示 if  a goto  p
       (jrop,x,y,p)  表示 if  x rop y  goto p
       (j,--,--,p)   表示 goto  p
    3,循环和分支语句的翻译

    循环语句
          大多数程序语言中都有如下形式的循环句:
          S→for i:=E1 step E2 until E3 do S1
       其语义各语言可能有所不同,主要区别在先判断、后执行还是先执行、后判断。

    分情况语句
          各种语言的分支语句不尽相同(case,switch等),这里我们假定其形式为下所示:

     case    E    of   
          C1 :    S1;
          C2 :    S2;
            …
          Cn-1 :   Sn-1;
        otherwise : Sn
        end;
    翻译成:

    T:=E;
    L1: if T≠C1 goto L2;
        S1;  goto next;
    L2: if T≠C2 goto L3;
        S2;  goto next;
    L3:
       …
    Ln: Sn;
    next: …

      以上是对这门课重点内容的总结,到此大致讲述了从输入语句到中间代码的过程,要进一步理解,还需实现代码。希望之后有机会能实现。感谢费老师的精彩讲授!

    
    展开全文
  • 0909论编译原理

    2015-09-09 17:12:00
    什么学编译原理? 在学习C语言之前我最初了解到的编译C语言的是TurboC,但是当上了VC++发现各种编译器都各自的优缺点。而学习编译原理是为了解决代码中的一些错误,并优化它。 怎么学编...
  • 编译原理课程总结

    2018-06-13 00:19:42
    其实经过三年的对编程的学习,对编译原理也不算是太陌生,大体还是个了解的,但是其操作原理是什么什么技术对程序进行识别和处理,是没有接触过的。学习完编译原理,知道了从词法分析到语法分析到中间代码的...
  • 编译原理的看法

    2016-09-08 22:16:00
    学习编译原理有什么好处?了不一定知道怎么,但是不就肯定没用。享受上帝的感觉 1、可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的2、可以更加客观的比较不同语言的差异3、更不容易被某个...
  • JavaScript 预编译原理 今天了大量时间复习了作用域、预编译等等知识 看了很多博文,翻开了以前看过的书(好像好多书都不会讲预编译) 发现当初觉得自己的很明白,其实还是存在一些思维误区 (很多博文具有...
  • 2、为什么学编译原理? 答:学习编译原理对我们的软件编程工作很重要的启发作用,他教会你在不同的情况下不同方法解决一些困难的问题,具有很好的指导性作用。 3、怎么学编译原理? 答:当然,首先是要知道...
  • 但是,这里也一个限制,就是测试脚本要做的基本事情必须现成的C语言库来实现,否则就做不到了;如果基本的操作是java来做的,那么还可以Antlr,这里不对Antlr做详细介绍。 lex是什么? 教科书上把lex的作用...
  • JavaScript预编译原理分析

    万次阅读 多人点赞 2016-10-27 23:06:34
    今天了大量时间复习了作用域,预编译等等知识 看了很多博文,翻开了以前看过的书 发现当初觉得自己的很明白,其实还是存在一些思维误区 今晚就整理了一下凌乱的思路 先整理一下预编译的知识吧,日后时间再...
  • 偶然想到了编译原理,可惜我没过。拿着同事的一本关于GCC开发工具的书,半天也没搞明白是在干什么,有点郁闷。 我对.Net比较熟悉一些,想.Net开发一个C语言的编程规范检测工具。大概的构思了一下,感觉还是可以...
  • 编译基本原理

    千次阅读 2013-10-12 16:01:35
    也没曾想过我的程序为什么能跑起来,也不曾知道有编译和链接两个过程等等,只知道我按语法来,我的程序就能正常跑,如果不是预期的结果,通过查看分析代码,慢慢找到Bug根源。直到Windows平台编写代码,
  • 编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标...
  • 一年前在知乎上看到一个回答,答主说自己了两天Python,十几个小时做完了全部的编译原理课程作业,当时吓傻了我,现在看来,虽然两天学会比不上,但Python做课程作业的速度简直是快,课程作业1里我还傻傻的...
  • 编译原理来看引用类型和值类型

    千次阅读 2008-05-09 13:27:00
    看了好多书,研究了下值类型和引用类型,总是种模棱两可的感觉,这让我萌发了,大众角度主要是分析内存中的东西,而我准备从内存和编译原理两个方面来入手,本人先说明我没编译原理,但略读了下,发现这个来...
  • 在我刚刚进入大学,从零开始学习 C 语言的时候,我就不断的从学长的口中听到一个又一个语言,比如 C++、Java、Python、JavaScript 这些大众的,也 Lisp、Perl、Ruby 这些相对小众的。一般来说,当程序员讨论一门...
  • 但是,最近我又陷进了“看这些基础知识有什么用?”、“这个知识,了解一下就够了,脑海里知道有这个知识”。就是这些想法,让我对一些知识浅尝即止,没法深入的去学习。学习后面链接的过程的视频,也有点囫囵吞枣。...
  • 但是,jsp中很多的java代码,当请求来到的时候,服务器会处理请求,根据请求的参数,执行对应的逻辑,注入数据到页面中。 jsp访问过程:这个过程是服务器根据请求url定位到了对应的jsp页面,然
  • 在我刚刚进入大学,从零开始学习 C 语言的时候,我就不断的从学长的口中听到一个又一个语言,比如 C++、Java、Python、JavaScript 这些大众的,也 Lisp、Perl、Ruby 这些相对小众的。一般来说,当程序员讨论一门...
  • C#写的一个词法分析器(编译原理

    千次阅读 2007-09-21 20:31:00
    最近编译原理课老师要求做一个词法分析器,现在正在学习C#,所以就C#做了一个玩玩,初步验证了一下,应该符合老师的要求啦,在这里把代码写出来大家看看啦,有什么不对的地方大家多多指教啊! 首先新建了一个C#...
  • 计算机原理学习 一

    2015-08-17 20:02:56
    问题 作为一个IT工程师,现在流行的话来说,这也是个高端大气上档次的工作。但是你是否真的了解你每天都在的计算机,你又是否真的了解你自己写的...CPU的指令和汇编语言和程序库和开发语言有什么关系?为

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 222
精华内容 88
关键字:

学编译原理有什么用