• 软考之路(五)---编译原理 概念篇


           从组成原理到编译原理,都是相互联系的,学习的知识都是在层层推进,顺利成章的,整个软考的全部的知识都能够从计算机的发展(组成原理)--->软件的开发(软件project)--->软件的算法设计(数据结构)-->高级语言写的系统--->在计算机上识别(编译原理)--->各个系统的背后数据的支持--->(数据库)---->---网络知识的应用---->网络基础……,能够把整个全部的软考的课本给串起来,这些都是构成如今丰富世界的不可缺少的条件。

          当然因为机器语言由0、1组成,难以阅读。所以在机器语言的基础上开发了汇编语言。因为汇编语言还是非常难使用,所以开发出高级语言。如今的高级语言编写的程序、系统都是在汇编语言的编译下由计算机认识翻译运行。


    编译原理的运行过程



    词法

          由基本字符(a,b……)构成的符号(单词)书写的规则
          核心:单词拼写是否正确


    语法

          由程序语言的基本符号组成程序中的各个语法成分的一组规则
          核心:关注的是句子的结构


    语义

        依照语法构成的各个语法成分(句子)的含义,关注的句子的含义
        核心:静态,在编译时期发现
                   动态,在执行时期发现

    语用


          设计语境,适不适合在这里使用。



    文法的概念

            描写叙述语言的语法结构的形式规则称为文法。组合成语言的规则

     

    基本形式:                       

             αβ

    终结符a,b,c,…..)和非终结符(A,BC,D,….

    终结符有原子性,不可再分。非终结符,能够再分。

    非终结符(程序)->终结符(语句)

    终结符不能够单独出如今α中;

    文法G是一个四元组,可表示为GVT,VN,S,P

          VTterminal symbol是一个非空有限集,每一个元素称为终结符。

          VNnonterminal symbol是一个非空有限集,每一个元素称为非终结符,它是不能单独在左边的。

          S是一个非终结符,称为開始符号;它至少要在一条产生式中作为左部出现。

          P是一个产生式集合(有限)。



    文法分类


    0文法(短语文法,能力相当于图灵机)

          例:AaAaa,aAa

        自我理解:左边至少有一个大写字母,右边任意

    1型文法(上下文有关文法)

         例AaAabAaBAc(左边至少有一个大写字母,且左边的长度小于等于右边的长度

         注意:αε也满足1型文法。

         自我理解:即产生式右边的字母个数必须大于等于左边的字母个数。

    2文法(上下文无关文法)----->语法分析检測

            例AaAabABAc(在1型文法的前提下,左边必须都是大写字母

          自我理解:即产生式左边必须全然都是大写字母

    3型文法(正规式)

           自我理解:即所有产生式右边要么没有大写字母,假设有必须所有在小写字母右边或者所有在小写字母左边也就是要保持线性一致



    样例1Aa,AaB,Ba,BcB,符合

            推断三型文法的注意事项:

          (1)个文法中要么符合左线性,要么符合右线性,两套规则不能同一时候出如今一个语法中 

         

          (2)一个产生式推出的非终结符仅仅能有一个;假设是一个文法中,非终结符要么都在右边的右边,要么都在右边的左边。


    自己主动机

           NFA 不确定的有限状态自己主动机

           DFA确定的有限状态自己主动机

    二者的差别:
           个人觉得最大的差别在于
    NFA中有带空的产生式,并且每一个符号能够有非常多个产生式,可是DFA每一个符号必须有的产生式个数就是字母表中有几个字母,每一个状态的产生式个数仅仅能是少于或者等于字母表中字母的个数。并且不能有带空的产生式 


       NDA--->DFA转化(下一遍可大家分享)


    正规式:正规式是描写叙述程序语言单词的表达式

      

    ① ε是一个正规式,它表示集合L(ε)={ε}。
    ② 若a是∑上的字符,则a是一个正规式,它所表示的正规集L(a)={a}。
    ③ 若正规式r和s分别表示正规集L(r)=L(s),则
    (a)r|s是正规式,表示集合L(r)∪L(s);
    (b)r·s是正规式,表示集合L(r)L(s);
    (c)r*是正规式,表示集合(L(r))*;
    (d)(r)是正规式,表示集合L(r)。


    产生式与正规式的转换:


    自我理解:这块结合咱们数学上的式子来理解就非常好了。


    总结

          编译的文法,是一种标准,依照标准来的,我们仅仅需遵循他们的规范标准就可以。时间万物都有一定的规律,当然各个语言有它的规范标准,知识间的相互联系,使问题变得简单,变得熟悉,学习起来更加的有兴趣,更具有动力。


    接下来常重点考点实例解析和大家分享……



  • 相关阅读:
    jqGrid api 中文说明
    jsp + js + 前端弹出框
    js中关于带数字类型参数传参丢失首位数字0问题
    java中WGS84坐标(ios)转换BD-09坐标(百度坐标)
    Java中的“浅复制”与“深复制”
    Git错误:error:failed to push some refs to 'git@gitee.com:name/project.git'
    git操作教程
    线程调度及进程调度
    同步锁Lock
    多线程案例
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4009129.html
Copyright © 2020-2023  润新知