【软件工具】编译原理简介与工程实践

2024-02-19 08:28

本文主要是介绍【软件工具】编译原理简介与工程实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引论

  1. 静态VS动态
    有3个角度:策略、作用域、内存位置。静态策略即编译时刻判定,动态策略即运行时刻。
    名字、位置、值,两者之间通过环境、状态两种映射来表示。

    环境
    状态
    名字
    变量

    静态与动态作用域
    动态策略处理时间的方式与静态作用域处理空间的方式类似。

    过程、函数与方法
    函数是一种有返回值的过程,方法表示过程或函数,但总是和类相关联。

  2. 编译技术的应用

    高级程序设计语言:Java没有指针和指针运算。
    针对计算机体系结构的优化,高性能系统的两类技术:并行、内存层次。

简单的语法制导翻译器

语法可以指导程序的翻译。
上下文无关文法,或文法:用于描述语法的表示方法。文法被用于编译器的前端。
箭头表示“具有如下形式”。
终结符号:数、运算符、关键字。
非终结符号:名字。
文法不是具体的程序,表达的是规则。如,产生式,
l i s t → l i s t + d i g i t list \rarr list + digit listlist+digit
表示这样的规则:任何一个列表后跟一个符号+以及另一个数位,可产生一个新列表。

语法树

工程

gcc

gcc是C Compiler(C 编译器),g++是C++ Compiler(C++编译器)。
设置调试模式

g++ -g ...

使用OpenCV库

g++ ... $(pkg-config --libs opencv)

CMake

cmake -DWITH_ADE=OFF -DCMAKE_BUILD_TYPE=Release ../../
set(CMAKE_BUILD_TYPE Release)

调试工具

  1. gdb, 用于调试C++
  2. pdb, Python

问题

  1. 程序编译为动态库,其依赖的程序库为静态库,编译错误,将要编译程序改为静态库解决,有么有办法使得动态库依赖静态库?

这篇关于【软件工具】编译原理简介与工程实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724097

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo