首页 > 其他分享 >考试突击3语法分析上到下

考试突击3语法分析上到下

时间:2023-06-19 09:00:10浏览次数:37  
标签:文法 终结符 开始符号 递归 follow 语法分析 突击 考试 first

自上而下

终结符和非终结符

  • 单词符号,称为终结符,(不可再分
  • 语法单位称为非终结符,(可再分,能出现再上下无关文法左边
  • 产生式:<> -> <><>
  • 开始符号只能是非终结符

直接推导

=>表示只需要一步的直接推导,

推导

a=>b=>c,
a到c是一个推导,要很多步

句型,句子,语言

img

  • 文法G所产生句子的全体称为语言L(G)
  • 句型终结符和非终结符
  • 句子全是终结符
  • 语言:就是句子的全体

语法树

产生二义性原因,有不同的语法树,产生的形态的句子


给定一个句子,判断他是否能由文法推出

  • ①S->字符串
  • ②语法树

语法分析方法

自上而下

左递归,和回溯

递归(假设是左递归 )

  • 直接左递归
    • 转右递归
  • 间接左递归
    • 1.间接转直接
    • 2.直接转右
  • 消除左递归算法,这后面没化简,
    • 1.对文法中的非终结符排序,(顺序随便
    • 用前面的非终结符的产生式表示现在后面的非终结符
    • 最后消除递归

回溯

  • 消除回溯,提取公共因子
    • 文法最左边右公共因子,

First集

First集是看产生式的开始符号后面紧跟的符号是什么,如果是终结符直接写在对应的First集合中多个或不管,连看,如果是非终结符,就要再对应的非终结里面找

follow集

follow集看右边(不是最右边,主要产生式右边有它就行),如A->BC Follow(C)其中找产生式后面有C的

  • 首先开始Follw(符号)加个#
  • \(A->\alpha B\)如果求Follow(B)其中B后面为空(就是B后面没又任何单词)将Follow(A)加入倒follow(B)中
  • A-> \(\alpha B \beta\) B后不为空,
    • 其中\(\beta\)是终结符,直接写,
    • 如果\(\beta\)不是终结符,将first(\(\beta\))(减上空字符),加入到followB中,
    • 如果\(\beta\)能推出空,那么就变成了第一个情况了

LL(1)

csdn

条件

  • 先找能推出两种或以上的产生式,就是右边有或

img

然后构造LL(1)表

分析过程

递归下降算法

img
img
大概就是在开始符号开始,然后如果是终结符就移动指针,如果是非终结符就跳下个函数

procedure 开始符号;
begin 
    if sym ='(' then //就执行下面
        begin
            advance;//移动指针
            T;//移动到T的开始符号,执行T去了类似函数,执行完T回来,说明执行完直到advance
            if sym = ')' then advance else error
        end
    if sym = 'a' then//移动的是第二条a
        begin
            advance;
            s'
        end
    else error

end

预测分析程序

构造分析表

img
构造分析表

  • 先看first集合,如果first集合A能推出a就就a列写推出a的写下
  • 如果first集合有空串,如A'的first集合有空串,那么将A'->\(\epsilon\)写到对应的follow列中

看是不是LL(1)文法
这里看有或的两个如上图,\(A'->AB|\epsilon\),那么看first(A)交集follow(A)如果是空集,属于

分析过程

img
img

标签:文法,终结符,开始符号,递归,follow,语法分析,突击,考试,first
From: https://www.cnblogs.com/tsqo/p/17490234.html

相关文章

  • 期末考试,卡夹!!!
    进程管理1.进程和线程的概念   进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单元。  线程是进程内的独立执行代码的实体和调度单元。2.进程的基本状态及状态转换的原因3.PCB的作用  作为独立运行基本单位的标志;能......
  • 《编译原理》实验四:自下而上的语法分析(SLR分析法)
    本实验采用SLR分析法,对PL/0语言的算术运算进行语法分析。本程序由我个人独立完成,代码为C++98,因此可能较丑陋,且不能保证完全正确,还请见谅 ( ̄□ ̄;)一.设计思想1.文法因实验二、三中的文法均不是LR(0)文法,所以本次实验采用了实验三中的文法进行SLR分析。(1)EBNF<表达式>::=[+|-]<......
  • CKS 考试题整理 (14)-启用API Server认证
    Context由kubeadm创建的cluster的kubernetesAPI服务器,出于测试目的,临时配置允许未经身份验证和未经授权的访问,授予匿名用户cluster-admin的访问权限。 Task重新配置cluster的KubernetesAPl服务器,以确保只允许经过身份验证和授权的REST请求。使用授权模式Node,R......
  • CKS 考试题整理 (15)-镜像扫描ImagePolicyWebhook
    Contextcluster上设置了容器镜像扫描器,但尚未完全集成到cluster的配置中。完成后,容器镜像扫描器应扫描并拒绝易受攻击的镜像的使用。Task注意:你必须在cluster的master节点上完成整个考题,所有服务和文件都已被准备好并放置在该节点上。 给定一个目录/etc/kubernetes......
  • CKS 考试题整理 (13)-使用 sysdig 检查容器里里的异常进程
    Task使用运行时检测工具来检测Podtomcat单个容器中频发生成和执行的异常进程有两种工具可供使用:sysdigfalco注:这些工具只预装在cluster的工作节点,不在master节点。 使用工具至少分析30秒,使用过滤器检查生成和执行的进程,将事件写到/opt/KSR00101/incidents/summ......
  • CKS 考试题整理 (09)-日志审计 log audit
    Task在cluster中启用审计日志。为此,请启用日志后端,并确保:日志存储在/var/log/kubernetes/audit-logs.txt日志文件能保留10天最多保留2个旧审计日志文件 /etc/kubernetes/logpolicy/sample-policy.yaml提供了基本策略。它仅指定不记录的内容。注意:基本策略位于clu......
  • CKS 考试题整理 (10)-Dockerfile检测
    Task分析和编辑给定的Dockerfile/cks/docker/Dockerfile(基于ubuntu:16.04镜像),并修复在文件中拥有的突出的安全/最佳实践问题的两个指令。 分析和编辑给定的清单文件/cks/docker/deployment.yaml,并修复在文件中拥有突出的安全/最佳实践问题的两个字段。 注意:请勿添加......
  • CKS 考试题整理 (11)-沙箱运行容器gVisor
    Context该cluster使用containerd作为CRI运行时。containerd的默认运行时处理程序是runc。containerd已准备好支持额外的运行时处理程序runsc(gVisor)。 Task使用名为runsc的现有运行时处理程序,创建一个名为untrusted的RuntimeClass。更新namespaceserver中的所有Pod......
  • CKS 考试题整理 (06)-默认网络策略
    Context一个默认拒绝(default-deny)的NetworkPolicy可避免在未定义任何其他NetworkPolicy的namespace中意外公开Pod。Task为所有类型为Ingress+Egress的流量在namespacetesting中创建一个名为denypolicy的新默认拒绝NetworkPolicy。此新的NetworkPolicy必须拒绝namespacetest......
  • CKS 考试题整理 (07)-RBAC - RoleBinding
    Context绑定到Pod的ServiceAccount的Role授予过度宽松的权限,完成以下项目以减少权限集。Task一个名为web-pod的现有Pod已在namespacedb中运行。编辑绑定到Pod的ServiceAccountservice-account-web的现有Role,仅允许只对service类型的资源执行get操作。......