• 文法和语言总结与梳理


      文法的类型是自从乔姆斯基建立的描述,他把文法分成4种类型,即0(文法)1(上下文有关的)2(上下文无关的)3(正规文法)。这几类文法的差别在于对产生式施加不同的限制。他的定义是令G是一个文法,S是文法的开始符号,abo的是文法G的一个句型。如果有S-*→aAo且(A-+→b测标b是句型abo相对于非终结符A的短语。特别地,如果有(A→β是句型abo相对于规则A→b的直接短语(也称简单短语)。一个右句型的直接短语称为该句型的句柄。句柄的概念只适合于右句型。

      句型的分析是对于上下文无关文法,语法树是句型推导过程的几何表示。语法树确实将所给句型的结构很直观地显示出来了。语法树是句型结构分析的极好工具。而这里所说的句型分析问题,是说如何知道所给定的符号串是文法的句型。句型的分析就早识别一个符号串是否为某文法的句型,是某个推导的构造过程。进一步说,当给定一个符号串时,试图按照某文法的规则为该符号串构造推导或语法树,以此识别出它是该文法的一个句型;当符号串全部由终结符号组成时,就是识别它是不是某文法的句子。因此也有人把语法树称为语法分析树分析树。对于程序设计语言来说,要识别的是程序设计语言的程序,程序是定义程序设计语言的文法的句子。句型分析是一个识别输入符号串是否为语法十正确的程序的过程。在语言的编译实现中,把完成句型分析的程序称为分析程序识别程序,分析算法又称识别算法。

     

    2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)

    整数n

    标识符i

    表达式e

    条件语句

    赋值语句

    复合语句

    函数

    程序

    ...

    整数n  <数字> => 0|1|2…7|8|9

    标识符i    <标识符> → <字母>{<字母>|<数字>}

    表达式e   <表达式> →  [+|-]<项>{<加减运算符><项>}

    条件语句  <条件语句> → if<条件>then<语句>

    赋值语句  <赋值语句> → <标识符>:=<表达式>

    复合语句  <复合语句> → begin<语句>{;<语句>}end

    赋值语句  <赋值语句> → <标识符>:=<表达式>

    程序       〈程序〉→〈分程序〉.

             〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉

  • 相关阅读:
    基于Oracle的Mybatis 批量插入
    java.lang.ClassCastException: com.sun.proxy.$Proxy32 cannot be cast to com.bkc.bpmp.core.cache.MemcachedManager
    理解 Mybatis的分页插件 PageHelper
    手机注册获取验证码的PHP代码
    php分页代码简单实现
    PHP简单漂亮的分页类
    PHP实现各种经典算法
    Vue 入门指南 JS
    php 经典的算法题你懂的
    WebService 之 WSDL文件 讲解
  • 原文地址:https://www.cnblogs.com/hoioh/p/11600320.html
Copyright © 2020-2023  润新知