首页 > 编程语言 >2 程序设计语言

2 程序设计语言

时间:2024-04-05 16:11:38浏览次数:27  
标签:语言 后缀 中间代码 语义 词法 程序设计 源程序 中缀

程序设计语言

编译程序和解释程序

低级语言

汇编和机器语言

高级语言

c c++ java python

image-20220813105937564

源程序(.java) -------------------解释(脚本)/编译(c c++ java)程序 翻译--------------------->目标程序(机器可以识别)

编译程序:

源程序.java ------编译程序------>等价源程序的目标程序.class 编译程序和源程序不参与目标程序的执行过程。

解释程序:

不生成独立的目标程序,源程序和解释程序都要参加到代码的运行过程。

控制程序:

顺序 选择 循环

编译器工作阶段

image-20220813112922648

编译步骤

词法 语法 语义 目标代码生成 是必须的且顺序不可修改

解释步骤

词法分析 语法分析 语义分析 也是必须的

符号表

不断收集 记录 使用源程序的相关符号的特征,并将其存入符号表。

记录程序的重要信息,便于辅助语义的正确性检查和代码的生成。

词法分析

输入:符号表

把源程序看成字符串,从左到右,从上到下,逐个的扫描出单词符号。

词法分析的过程依据 的是语言的词法规则,判断结构是否正确,并输出记号流

语法分析

输入:记号流

输出:语法树(分析数)

可以检测程序中的语法错误。例如检测括号匹配,变量未赋值被使用。

语义分析

输入:语法树

分析语法结构的含义,检测是否出现静态语义错误(类型不匹配、除小数)。

动态语义错误

在程序运行的时候可以检测,例如 除0,死循环。

image-20220813134719241

目标代码生成

是编译器工作的最后一个阶段。

目的:

  1. 是把中间代码变成特定机器可以运行的目标代码,和具体的机器密切相关。

  2. 程序中的寄存器的分配。

中间代码生成

中间代码和具体的机器无关,可以将不同的高级语言翻译成同一种中间代码,具有良好的可移植性。

常见的中间代码有:

后缀式、三地址码、三元式、四元式、树、图。

正规式

词法分析阶段使用正规式

实例

image-20220813145348737

有限自动机

词法分析阶段使用有限自动机

确定的有限自动机:每个状态识别字符后转移的状态是唯一的。

不确定的有限自动机:每个状态识别字符后转移的状态是不唯一的。

image-20220813150759788正确识别:一个正规式识别完成后到终态。

image-20220813150927984不需要识别任何字符就可以转移。

上下文无关文法

大多数程序设计语言用上下文无关文法来描述

image-20220813151436351

后缀式+中缀式

中缀式:1-2 + 3 *(1+2)

后缀式:12-34*

中缀 转后缀式:

  1. 1-2 + 3 *(12+)
  2. 1-2+(312+*)
  3. (12-)+(312+*)
  4. 12-312+*+

后缀转中缀

image-20220813162908926

杂题

image-20220813162849132

image-20220813163002694

image-20220813163107923

image-20220813163230008

image-20220813163249130

image-20220813163320031

image-20220813163428510

image-20220813163456721

image-20220813163520312 image-20220813163621451

image-20220813163744080

image-20220813163810913

image-20220813164004256

image-20220813164135000

image-20220813164152357

image-20220813164211316

image-20220813164250680

image-20220813164301221

标签:语言,后缀,中间代码,语义,词法,程序设计,源程序,中缀
From: https://www.cnblogs.com/baidh/p/18115849

相关文章

  • C语言中循环语句while 中判断条件出现 || 和 && 的区别
    当while循环条件中出现||(逻辑或) ||两边的条件有任意一个满足条件时,即为真(也就是非0),循环继续,只有两边都满足条件时,即为假(也就是0),跳出循环  当while循环条件中出现&&(逻辑与)&& 两边都满足条件时,即为真(也就是非0,循环继续只要有任意一边满足条件,即为假(也就是0),跳出循环......
  • c | C语言
    C1.HelloWorld#include<stdio.h>intmain(){printf("HelloWorld");return0;}2.DataTypeInteger:charintshortlong/longlongUnsignedintegers:useunsignedkeywordbeforeIntegerFloatpointnumbers:floatdoubleStructures......
  • 大语言模型LLM《提示词工程指南》学习笔记01
    文章目录大语言模型LLM《提示词工程指南》学习笔记01以下是使用不同LLM提供程序时会遇到的常见设置:标准提示词应该遵循以下格式:提示词要素大语言模型LLM《提示词工程指南》学习笔记01提示工程(PromptEngineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语......
  • Coursera自然语言处理专项课程04:Natural Language Processing with Attention Models
    NaturalLanguageProcessingSpecializationIntroductionhttps://www.coursera.org/specializations/natural-language-processingCertificateNaturalLanguageProcessingwithAttentionModelsCourseCertificate本文是学习这门课NaturalLanguageProcessing......
  • C语言数据结构专题--顺序表(1基础)
    前言我们在对C语言有一定的了解之后,我们就可以开始数据结构的学习了,数据结构多用指针、结构体、动态内存开辟等知识,若对这些知识还不太了解的朋友,就需要加深其理解了,那么废话不多说,我们正式开始本节的学习什么是数据结构数据结构是由"数据"和"结构"两个词相组合得到的......
  • 文本处理语言awk基本语法
    文章目录运算符流程控制函数封装awk语言初步AWK是一种强大的文本处理和数据解析工具,它支持丰富的运算符和流程控制语句。运算符方面,AWK提供了基本的算术运算符(+,-,*,/,%,^,**)和赋值运算符(+=,-=,*=,/=,%=,^=),以及递增递减运算符(++,--,a++,a–)。此外,AW......
  • 基于大型语言模型的智能体(Agent)研究综述--人大
    内容概述论文地址:https://arxiv.org/pdf/2308.11432.pdf这篇综述内容有35页,内容很多,俗话说一图胜千言,作者提供了5张精美的图片和3个表格,把这些搞明白后对这篇综述也就理解差不多了。文章的总体结构如下由6部分组成,1介绍、2智能体结构、3智能体应用、4智能体评价、5挑战、6总......
  • 【C语言】函数递归——高手都在用的小技巧
    文章目录1.什么是递归2.递归的主要思想3.递归举例说明3.1n的阶乘3.2顺序打印⼀个整数的每⼀位4.递归与迭代4.1求第n个斐波那契数1.什么是递归递归简单来说就是一个函数自己调用自己,是不是感觉很莫名其妙,我第一次学习的时候就觉得为什么函数会自己调用自己......
  • 杨氏矩阵(C语言)
    文章目录问题技术名词解释思路关键代码运行代码问题有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);技术名词解释杨氏矩阵: 矩阵的每行从左到右是递增的,每列从上到下是递增的......
  • C语言—用EaxyX绘制实时钟表
     代码效果如图#undefUNICODE#undef_UNICODE#include<graphics.h>#include<conio.h>#include<math.h>#definewidth640#definehigh480#definePI3.14159intmain(){ initgraph(width,high); intcenter_x,center_y; center_x=width/2;......