码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 编译原理复习——词法分析


    词法分析程序的主要功能
    1.输入源程序,输出单词符号
    2. 从左至右 , 从上至下 逐个字符地对源程序进行扫描
    3.把构成源程序的 字符串 转换成 单词符号的 序列
    4.输出单词序列用于语法分析
    其他功能
    滤掉空格、跳过注释、换行符
    行、列计数
    发现并 定位 词法错误
    词法分析程序的输出形式
    单词符号分为以下5类:
    关键字(保留字,基本字)
    标识符:变量名,过程名
    常数: 整形,实型
    运算符:+, -, *, /,…
    界符: ; , ( ) …
    状态转换图 是词法分析器的重要组件之一
    有限方向图, 结点 表示状态,状态间用 箭弧 连 接,箭弧上的 标记 (符号)代表射出结点状态
    下有可能出现的输入字符
    一张状态转换图有:
    ( 1 )有限个状态   ( 2 )一个初态   ( 3 )一个或多个终态 , 用 双圈表示
    确定的有穷自动机 (DFA)
    确定的有穷自动机 DFA 定义: DFA 是一个五元组, M=(K, Σ, f , S, Z)
     
    状态转换图 : DFA M 含有 m 个状态, n 个输入字符,则状态转换图有 m 个结点,每个结点至多有 n 条箭弧射出,每条箭弧用 Σ 中一个不同的输入字符做标记
    DFA的特点:
    (1) 初态唯一
    (2) 输入字符不包括 ε
    (3) 有向边上只有一个字符
    (4) 一个状态对于某个字符,最多只有一条出边
    所以上图中所示的状态转换图不是一个DFA

     

    可被 DFA 识别的单词符号
    对 ∑ * 中任意符号串 t ,若存在从初态到某一终态的 通路,且通路上所有弧标记符连接成的字等于 t ,
    则称 t 可为 DFA 所识别 ( 读出或接受 ) 。 即对于任意字符串 t ∈ Σ, f (S , t)=P, P ∈ Z
    可识别空串
    若 M的 初态结点同时也是终态结点,则空字 ε 可为 M所识别       f (k i , ε)= k i
    不确定的有穷自动机 NFA
    NFA是一个五元组, M=(K, Σ, f , S, Z)

     只有f和S是和DFA是不同的

    NFA的特点:
    (1) 初态不 唯一
    (2)输入字符包括 ε
    (3)有向边上可以为 字符串
    (4)一个状态对于某个字符,可能有 多条输 出边 ,即状态的后继不唯一
    可被NFA识别的单词符号
    对∑ * 中任意字α,若存在从初态到某一终态的通 路,且通路上所有弧标记符连接成的字等于α,则
    称α可为NFA所识别(读出或接受)。
    可识别空串
    若M的初态结点同时也是终态结点,或存在某初 态到某终态的ε通路,则空字ε可为M所识别。
    DFA是NFA的特例
    有穷自动机的等价性
    对于每个NFA M,存在一个DFA M’使得 L(M)=L(M’)
    对于任何两个有穷自动机,如果L(M)=L(M’), 则称M不M‘是等价的
    NFA转换成DFA采用的方法是子集法具体参考 NFA转换成DFA的方法——子集法_用编程写诗的博客-CSDN博客_nfa转dfa子集法
    以及DFA的最小化转化参考
    确定的有穷自动机DFA的最小化_用编程写诗的博客-CSDN博客

     

  • 相关阅读:
    Web Vue VI
    python3.11教程1:python基础语法、程序控制、函数
    java-net-php-python-jsp员工时间管理系统查重PPT计算机毕业设计程序
    flutter 随机数的生成 四舍五入
    Contos7中Mysql忘记密码或者初始登录时密码错误解决方法
    【Python人工智能】Python全栈体系(二十一)
    润和软件HopeStage与华宇信息TAS应用中间件完成产品兼容性互认证
    GitHub:黑客盗用 OAuth 令牌,导致数十个组织数据泄露
    心理测评测试h5公众号字节微信小程序app开源版开发
    面向对象之设计原则与设计模式
  • 原文地址:https://blog.csdn.net/m0_53345417/article/details/127602807
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号