Python兴趣篇_模拟编译中的字典运用

在Python基础篇_字典基本操作中说到,字典可以用于存储编译时需要的信息或参数。
本文就来简单讨论一下模拟编译过程中如何利用字典数据类型;
模仿编译过程中,Python 字典可以用于存储和处理与编译相关的各种信息。以下是 Python 字典在模拟编译中应用的示例:

  1. 符号表管理

    在编译过程中,符号表用于存储变量、函数和类型的名称及其相关信息。使用 Python 字典来模拟符号表,将变量、函数和类型的名称作为键,相关的信息(如类型、作用域等)作为值

symbol_table = {}# 添加变量符号
symbol_table["x"] = {"type": "int", "scope": "global"}# 添加函数符号
symbol_table["add"] = {"type": "function", "parameters": ["int", "int"], "body": "int"}
  1. 语法分析

    解析源代码时,使用 Python 字典来存储解析过程中生成的语法树节点。每个节点可以表示一个语法结构,如变量声明、函数定义等,而字典的键可以表示节点的标识符或名称

syntax_tree = {}# 添加语法树节点
syntax_tree["expression"] = {"type": "binary_op","left": {"type": "variable", "name": "x"},"right": {"type": "literal", "value": 5},"operator": "+",
}
  1. 语义分析

    在语义分析阶段,使用 Python 字典来存储类型信息、变量和函数的作用域规则、语义错误信息等,有助于编译器检查语义错误并生成有效的目标代码

type_info = {}
type_info["x"] = "int"
type_info["add"] = ["int", "int"] -> "int"
  1. 代码生成

    在生成目标代码时,使用 Python 字典来存储生成的代码块、指令或符号表条目,有助于编译器将语法树转换为有效的目标代码

code_blocks = {}
code_blocks["main"] = """x = 5result = add(x, 3)
"""
  1. 符号查找

    在编译过程中,可能需要查找变量、函数或类型的定义或引用。用Python 字典存储符号的名称和位置信息,可以快速查找和解析相关符号

def find_symbol(symbol_tabledef,name):# 如果找不到符号,会引发 KeyError 异常try:print(symbol_tabledef[name])  # 输出会引发 KeyError 异常except KeyError:print('符号未找到')  # 输出 "符号未找到"	def find_symbol_ext(symbol_tabledef,name):if name in symbol_tabledef:return symbol_tabledef[name]else:return None# 创建一个符号表
symbol_table = {}# 添加符号
symbol_table['x'] = 10
symbol_table['y'] = 20
symbol_table['z'] = 30# 查找符号
print(symbol_table['x'])  # 输出 10
print(find_symbol(symbol_table, 'y'))  # 输出 20
print(find_symbol_ext(symbol_table, 'z'))  # 输出 30

编程之路-漫漫,路漫漫其修远兮,吾将上下而求索 ^^

may the odds be ever in your favor ~

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

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

相关文章

【征服redis8】Redis的AOF持久化

Redis 支持多种持久化方式来保证数据的可靠性和持久性。前面我们介绍了RDB方式。我们我们介绍第二种方式——AOF(Append Only File)机制是一种常用的持久化方式,它记录了所有对 Redis 数据库进行修改的命令,在 Redis 重启时可以使…

【办公自动化】利用Python代码暴力破解RAR压缩包的密码

title: 利用Python代码暴力破解RAR压缩包的密码 tags: bigleft excerpt: 利用Python代码暴力破解RAR压缩包的密码 利用Python代码暴力破解RAR压缩包的密码 引言 有时从网盘或p2p下载了几个G的资源,下载了几天,终于下载完成,结果发现来需要密…

条款43:学习处理模板化基类内的名称

1.前言 假设我们需要编写一个程序,它能够传送信息到若干不同的公司去。信息要不编译称密码,要不就是未加工的文字。如果编译器间我们有足够的信息来决定哪一个信息传至哪一家公司,就可以采用基于template的解法: class Company{…

【C++入门到精通】智能指针 auto_ptr、unique_ptr简介及C++模拟实现 [ C++入门 ]

阅读导航 引言一、std::auto_ptr1. 简介2. 使用示例3. C模拟实现 二、std::unique_ptr1. 简介2. 使用示例3. C模拟实现 温馨提示 引言 在 C 中,智能指针是一种非常重要的概念,它能够帮助我们自动管理动态分配的内存,避免出现内存泄漏等问题。…

vue3有了解过吗?能说说跟vue2的区别吗?

一、Vue3介绍 关于vue3的重构背景,尤大是这样说的: 「Vue 新版本的理念成型于 2018 年末,当时 Vue 2 的代码库已经有两岁半了。比起通用软件的生命周期来这好像也没那么久,但在这段时期,前端世界已经今昔非比了 在我…

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:初窥mybatis源码

在历经之前几章课程的深入学习之后,我想我们已经初步掌握了如何运用jdbc连接数据库的技术;同时,我们也实现了利用mybatis框架的能力,甚至尝试着手编写、实现了ORM的框架。我坚信大家对MyBatis的理解和应用已经达到了一定程度。然而…

昇思MindSpore技术公开课——第三课:GPT

1、学习总结 1.1Unsupervised Language Modelling GPT代表“生成预训练”(Generative Pre-trained Transformer)。GPT模型是由OpenAI公司开发的一种基于Transformer架构的人工智能语言模型。它在大规模文本数据上进行预训练,学习了丰富的语…

Nginx 简介

1、概念介绍 Nginx ("engine x") 是一个轻量级、高性能的 WEB 服务器软件和反向代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发…

k8s---对外服务 ingress

目录 目录 目录 ingress与service ingress的组成 ingress-controller: ingress暴露服务的方式 2.方式二:DaemonSethostnetworknodeSelector DaemonSethostnetworknodeSelector如何实现 3.deploymentNodePort: 虚拟主机的方式实现http代…

Windows 下 PYQT开发环境的搭建:

(1)环境搭建: PYQT 安装包: Anaconda: Anaconda3-2023.09-0-Windows-x86_64 pycharm: pycharm 2019.3 下载包: Anaconda:下载成功 |蟒蛇 (anaconda.com) pycharm: pycharm安装包_pycharm用copilotchat资源-CSD…

gradle/maven排除配置

maven <!--打包去掉jar包内的配置文件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><excludes><exclude>application-gateway.yml</exclude&g…

鸿蒙开发之如何将相册中的图片读到Canvas画布

第一步&#xff1a;申请文件权限&#xff08;很重要&#xff09; 申请方法见上一篇博客 https://blog.csdn.net/qq_15509071/article/details/135659048 第二步&#xff1a;打开相册&#xff0c;选取图片 try {let PhotoSelectOptions new picker.PhotoSelectOptions();Pho…

Servlet 预览pdf

一、背景 上篇文章介绍了图片的预览&#xff0c;这篇我们介绍下 pdf 文件的预览&#xff0c;pdf 预览在实际开发中用的还是比较多的&#xff0c;比如很多文件协议、合同都是用pdf 格式&#xff0c;协议预览就需要我们做 pdf 预览了。 二、实操 其实在上篇文章最后已经说了常用…

git push/pull/clone超时解决

git push/pull/clone超时解决 git push/pull/clone超时解决问题描述:尝试修复 git push/pull/clone超时解决 问题描述: 之前都可以正常操作,突然远程仓库的操作都超时 Failed to connect to github.com port 443: Timed out尝试修复 切换请求方式:ssh/https换一种请求操作其…

Springboot+vue的智能家居系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的智能家居系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的智能家居系统&#xff0c;采用M&#xff08;model&a…

linux系统nginx工具的日志配置

日志配置 日志介绍log_format 指令error_log 指令配置段&#xff1a;main&#xff0c; http, mail, stream, server, location作用域 open_log_file_cache 指令配置段:http、server、location作用域中。 log_not_found 指令log_subrequest指令rewrite_log指令日志配置 日志介绍…

NVIDIA jetson编译opencv 源码 python版本

安装 jetson-stats 查看GPU的利用率 sudo apt-get install python3-pip sudo -H pip3 install jetson-stats 运行 jtop 进行查看 opencv 编译python版本 编译命令 cmake -D CMAKE_INSTALL_PREFIX/usr/local/opencv-4.6.0 -D CMAKE_BUILD_TYPERELEASE -D WITH_OPENGLON -D …

python爬虫如何写,有哪些成功爬取的案例

编写Python爬虫时&#xff0c;常用的库包括Requests、Beautiful Soup和Scrapy。以下是三个简单的Python爬虫案例&#xff0c;分别使用Requests和Beautiful Soup&#xff0c;以及Scrapy。 1. 使用Requests和Beautiful Soup爬取网页内容&#xff1a; import requests from bs4 …

24校招,江淮汽车软件测试工程师技术面+HR面

前言 记录一下楼主的面试经历&#xff0c;希望对后来者有用 时间&#xff1a;15min 平台&#xff1a;腾讯会议 过程 技术面试 自我介绍 为啥不考研 实习收获 你有做过软件开发的工作吗&#xff1f; 除了Java和Python&#xff0c;还会其他的语言吗&#xff1f; 学过C吗…

2.4 网络层01

2.4 网络层01 2.4.1 网络层概述 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 异构网络内部的计算机要想实现通信是不需要实现网络互联的&#xff0c;异构网络之间要想实现通信就必须实现网络互连。 路由器工作在五层协议体系结构的网络…