关于编译的一些思路和猜想

一、编译原理的难度

编译原理特别复杂,研究的是高级语言如何翻译成汇编语言的过程。


二、编译过程中一些思路

(一)语义识别的作用
语义识别指的是把一些无关字符忽略,把一些变量名保存在一起,把用空格隔开的关键字单独放一起。

例如:
从源代码第一个字符开始遍历,如果:
1、遇到 //开头的字符,那么后面直到换行符之间的字符都是注释,就可以忽略。

2、如果遇到一个字符,它的左边是一行的开头,或者是空格,那么保存起来,继续读取直到下一个空格或者特殊符(特殊符是各种括号,各种运算符),就把这一段字符集中保存在一起。

3、判断第2步获取的字符是变量名,还是关键字。

4、遇到运算符或者括号就保存起来,作为一个单位。

5、遇到语句结束符也单独作为一个单位。


(二)语法判断的思路
1、把从语义识别过程中得到的每个单位构造成一棵树。

2、树的根是每个重新开始的语义单位,例如 var、 for、while、int等等。

3、根节点的子节点是遍历过程中出现的下一个语义单位。

4、持续第3步,直到语句结束符;的添加。

5、根据编程语言的设计规则,来判断以上构造的语法树是否合法。
也就是判断每个节点是否允许出现该子节点,例如 for节点是否允许出现 int节点?不能。for节点一般子节点是 左花括号{节点。

语法判断完成后,就能得出程序编码是否有错误。


(三)把每个语法树转成汇编语言
1、把声明和创建变量的代码替换为 分配内存空间,把变量名和内存地址号保存起来。

2、如果是循环,就建立一个子程序,名字是唯一生成的,把循环体作为子程序的内容,循环验证条件就转换成汇编的判断条件。

如果满足就调用子程序,不满足就结束子程序。

3、如果使用网络读写、磁盘读写,就调用对应的主板中断程序。

4、如果是一些运算,就用对应的汇编运算符来替代,把结果存入寄存器或者内存块中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新ysyx

一、克隆仓库 1.创建ssh key ssh-keygen -t rsa cd ~/.ssh ls 查看里面是否有id_rsa id_rsa.pub ssh-keygen -t rsa -C "xiantong15834753336outlook.com" cat id_rsa.pub***********查看里面的内容,复制到下图中绿色的按钮 git init ssh -T g…

spark3.0.1版本查询Hbase数据库例子

需求背景 现有需求,需要采用spark查询hbase数据库的数据同步到中间分析库,记录spark集成hbase的简单例子代码 import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.client.{ConnectionFactory, Scan} import org.apach…

Marin说PCB之Max parallel知多少?

今天是个阳光明媚,万里乌云的好日子。小编我一如既往地到家打开电脑准备看腾讯视频的五十公里桃花坞的第四季,在看到汪苏泷汪台说650电台要解散的时候小编我差点也哭了。650电台之于桃花坞就像乐队的鼓手一样,都是一个团队的灵感啊&#xff0…

CSS中的长度单位详解

在CSS中,长度单位是定义元素尺寸、间距、边距等的重要工具。不同的长度单位具有不同的特性和使用场景。 绝对长度单位 绝对长度单位在所有设备和浏览器中表示相同的长度。这些单位包括: 1.像素(px) 像素是最常用的长度单位。一…

C语言分支和循环(2)

我的相关博客: C语言的分支与循环(1) 1.switch语句 除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 else if…

非质量成本总结

非质量成本 非质量成本 定义 举例 固定成本 不随生产量或工作量变动而变动的成本 办公室租赁费 可变成本 随着生产量或工作变动而变动的成本 材料费 直接成本 可以直接计入某项目的成本 工人工资 间接成本 不能直接计入某项目而需要再几个项目之间或在项目与职能部…

Linux基本指令3

Linux基本指令3 目录 Linux基本指令3 一、Linux文件系统管理 二、Linux进程与服务管理

亿发:制造型企业信息化规划——从破冰到全面落地

在制造型企业中,信息化规划的落地是一个复杂而关键的过程。尽管规划和蓝图可能已经制定完毕,但如何成功地实施信息化才是关键所在。本文将详细介绍制造型企业信息化规划的落地过程,通过三个周期逐步推进,最终实现信息化与自动化的…

深度学习知识与心得

目录 深度学习简介 传统机器学习 深度学习发展 感知机 前馈神经网络 前馈神经网络(BP网络) 深度学习框架讲解 深度学习框架 TensorFlow 一个简单的线性函数拟合过程 卷积神经网络CNN(计算机视觉) 自然语言处理NLP Wo…

OpenAI助手API接入-问答对自动生成

支持GPT-3.5-Turbo, GPT-4o, GPT-4-Turbo import json import openai from pathlib import Path import os client openai.OpenAI(base_urlbase_url, api_keyapi_key) file client.files.create( fileopen("H3.pdf", "rb"), purposeassistants ) …

HTTP 的三次握手

​​​​​ HTTP 的三次握手是指在建立 TCP 连接时,客户端和服务器之间进行的三步握手过程。这个过程确保了双方都能够互相通信,并且同步了彼此的序列号和确认号。 概念: 第一次握手:客户端发送一个 SYN(同步…

2.1数据的表示和运算--进位制

2.数据的表示和运算 2.1进位制 🔺问题:计算机采用二进制有什么优点? 答: 1.制造两个稳态的物理器件较容易。 2.二进制的运算规则简单。 3.便于用逻辑门电路实现运算。 4.二进制的0和1正好对应逻辑值真和假。 🔺…

成功解决“ModuleNotFoundError: No Module Named ‘utils’”错误的全面指南

成功解决“ModuleNotFoundError: No Module Named ‘utils’”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No Module Named utils这样的错误通常意味着Python解释器无法找到名为utils的模块。这可能是由于多种原因造成的,比如模块确实不存…

念念不忘,必有回响 的 echo

念念不忘,必有回响 的 echo 念念不忘,必有回响 的 echo几个示例更多信息 念念不忘,必有回响 的 echo echo命令用于在终端设备上输出字符串或变量的值,类似于Python的print和C语言的printf,是Linux系统中最常用的命令…

【GIC400】——PLIC,NVIC 和 GIC 中断对比

文章目录 PLIC,NVIC 和 GIC 中断对比中断向量表PLIC中断向量表中断使能中断服务函数NVIC中断向量表中断使能中断服务函数GIC中断向量表系列文章 【ARMv7-A】——异常与中断 【ARMv7-A】——异常中断处理概述

深度学习笔记:0.cuda安装,成功

B站上说:cs上骗子太多。文章太久,我深以为然。用了一天。才装好。其实很简单。 CUDA安装教程(超详细)-CSDN博客文章浏览阅读1w次,点赞5次,收藏56次。windows10 版本安装 CUDA ,首先需要下载两个…

AI技术的演进与未来

随着科技的不断进步,人工智能(AI)技术已经成为引领时代发展的重要力量。从最初的模糊概念到如今的具体应用,wre98.cnAI技术已经渗透到我们生活的方方面面,并不断拓展其边界。本文将探讨AI技术的演进历程、当前应用领域…

【并发程序设计】总篇集(八万字)

11_Concurrent_Programing 1.进程概念 在Linux中,进程是操作系统分配资源和调度运行的基本单位。 Linux中的进程有以下用处: 提高CPU利用率:通过进程的并发执行,可以让多个程序同时利用计算机的资源,这样每个用户都…

Springboot与mongodb集成及聚合查询

Spring Boot 与 MongoDB 的集成为开发者提供了一种简便的方式来构建高性能、基于文档的数据驱动应用程序。MongoDB 是一个非关系型数据库(NoSQL),它使用 JSON 格式的文档进行数据存储,非常适合处理大量的、半结构化的数据。而 Spr…

mybatisplus 字段存的是json 在查询的时候怎么映射成对象

数据库交互对象 TableName(value "表名", autoResultMap true)TableField(typeHandler JacksonTypeHandler.class, value "user_info")private User user;autoResultMap 是一个 MyBatis-Plus 中的注解属性,用于控制是否自动生成结果映射。…