首页 > 编程语言 >程序设计语言基础-编译过程概述+表达式

程序设计语言基础-编译过程概述+表达式

时间:2024-08-23 19:03:50浏览次数:6  
标签:语言 错误 静态 语义 编译 程序设计 表达式

程序设计语言分类

面向机器的语言

由0、1组成的机器指令序列或汇编语言(如:move ax,bx),可读性差,难以修改和维护。

面向应用程序的语言

如,Java、C、C++、Python、Delphi、PASCAL等,更接近人类语言,提高程序设计效率。

程序设计语言分类

image

生成目标代码过程

image

编译程序

词法分析

输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误
image

语法分析阶段

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通过语法分析确定整个输入串是否构成一个语法上正确的程序
image

语义分析阶段

主要检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析分为静态分析和动态分析两个部分。静态语义分析使用语法制导翻译

点击查看代码
public class Example {
public static void main(String[] args) {
int x = 5;
int y = "Hello"; // 静态类型错误
 System.out.println(“Sum: ” + (x / 0)); // 动态类型错误
 }
}

中间代码

不依赖具体计算机,表现形式如下。

  1. 后缀式(逆波兰式)
  2. 树型表示
  3. 三元式:X =( a + b)( c + d )
    ①(+ , a , b)②(+ , c , d )③(
    , ① , ②)④( =,③,x)
  4. 四元式: X =(a*b)+ c/d
    ①( *, a , b , T1)②( / , c , d , T2)③( +, T1 , T2 , T3 )④( =
    ,T1,—,X)

表达式出错处理

静态错误(编译时出现)

语法错误,如:单词拼写错误、标点符号错误、表达式缺操作数、
括号不匹配等。
静态语义错误,如:运算符与运算对象类型不合法。

动态错误(运行时出现)

如:变量取0做除数。
如:引用数组下标越界

标签:语言,错误,静态,语义,编译,程序设计,表达式
From: https://www.cnblogs.com/xieshier/p/18376879

相关文章

  • 【OpenHarmony】openharmony移植到RK3568------获取源码编译OpenHarmony源码
    一、源码获取源码获取有好几种方式,在这里直接在镜像网站下载源码,点击下面连接下载全量版本的OpenHarmony4.1https://repo.huaweicloud.com/openharmony/os/4.1-Release/code-v4.1-Release.tar.gz将源码放到自己建立的目录下解压,我放入的是这个目录/home/wzz/work/0H4.1......
  • Ubuntu安装arm交叉编译环境
    本地机是x86架构,目标机是arm64架构。CPU架构描述x86_64 /x86/amd6464位AMD/英特尔CPU的别称AArch64 /arm64/ARMv8/ARMv964位ARMCPU的别称i38632位AMD/英特尔CPUAArch32 /arm/ARMv1 到 ARMv732位ARMCPU的别称......
  • Java语言程序设计——篇十六
           ......
  • [每周一更]-(第111期):从零开始:如何在 CentOS 上源码编译安装 PHP 7.4
    文章目录系统信息:0、安装版本:1、下载/解压2、安装依赖3、配置autoconf4、配置参数5、编译和安装6、验证安装的插件6.1、配置php.ini6.2、配置opcache7、错误7.1Failedtoconnectto2a03:2880:f10e:83:face:b00c:0:25de:Networkisunreachable7.1.1禁用yum使用I......
  • 如何在Windows下使用make编译Makefile
    最近有小伙伴咨询我去编译运行一个程序。我一开始以为是CMakeLists,结果发现是makefile。 什么是Makefile‌Makefile是一种用于自动化构建和管理程序的工具‌,它定义了项目中文件的依赖关系和构建步骤,帮助程序员自动化编译、链接和打包程序,从而提高软件开发效率。Makefile的主......
  • 【Android笔记】Android APK编译打包流程
    前言本文将介绍Android从一个项目打包成APK的过程,其中涉及AndroidJava和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。步骤总体的打包流程如下图,下面就介绍下详细的打包步骤。1、将aidl文件编译成java文件在构建过程中,Gradle会调用AIDL编......
  • 利用源生成器,在编译阶段生成映射代码,减少运行时反射
    利用源生成器,在编译阶段生成映射代码,减少运行时反射这里有一个Product类和ProductDto类,实现对象自身的拷贝,或者Product映射ProductDtoGenMapperAttribute标注了类型需要生成映射方法,同时要求实现IAutoMap接口(由生成器自动实现)构造函数可选参数为目标类型,默认是自身MaoToAttr......
  • C#—lambda表达式
    在一些数组的方法,有些方法需要传递一个方法进行计算,但是这个方法可能只需要使用一次,将他封装到类中会比较麻烦且没必要,这时候就可以使用lambda表达式了。lambda表达式可以很方便的创建一个方法创建方式lambda可以使用两种方式来创建//表达式lambda,会自动返回......
  • Python正则表达式提取车牌号
    在Python中使用正则表达式(RegularExpressions)来提取车牌号是一个常见的任务,尤其是在处理车辆信息或进行图像识别后的文本处理时。中国的车牌号格式多种多样,但通常包含省份简称、英文字母和数字。以下是一个使用Python正则表达式来提取常见中国车牌号(包括新能源车牌)的示例代码。1......
  • 20240819编译 链接 单片机执行的第一个语句
    2024年8月中旬在宝鸡出差,在B站上学习了下。在linux操作系统中,gdb是调试器,gcc是编译器。Linux操作系统将main.elf文件加载到内存中以后,操作系统为其分配进程,然后main函数就开始执行了。输入layoutasm则显示出来汇编代码 键入“starti”的时候 进入到程序里面的第一......