自定义编译器功能&汇编编程

本文介绍了C++的关键特性和语言子集的上下文无关文法定义,包括关键字、标识符、常量、声明语句、函数、赋值运算、自增自减、算数运算等。同时,展示了如何使用GCC编译C++程序,并给出了一个简单的阶乘程序及其对应的x86汇编代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注重版权,若要转载烦请附上作者和链接

作者:Joshua_yi

链接:https://blog.csdn.net/weixin_44984664/article/details/109227729


一、引言

(1)实验环境

  • 我的平台: deepin

二、gcc支持的c++语言特性

(1)简介

C++ 是 C 语言的继承,它既可以进行 C 语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++ 不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

(2)c++ tokens

一个完整的 c++ 程序在进行词法分析后被分解成了一个个的 token(单词),而语法分析则是在一个个独立的 token 中给它们建立联系,得到相应的逻辑关系。

1、关键字

c++ 的关键字不能在程序中重新定义或重载;除了关键字,有些标识符也有特殊含义,有时可以作变量或函数名,但在一些特定环境下有特殊含义。

2、标识符

c++ 的标识符在命名时必须避开关键字,标识符可以代表 C++ 程序中的变量名、函数名、类名等等。

3、常量

常量可以是数字、字符、字符串,在程序中有不变的值。

(3)声明语句

声明语句由类型 (type) 和你想要在程序中使用的实体构成,同时你也可以定义该实体的作用域。每种实体的定义方式不同,通过定义实体可以在程序中发挥作用。

(4)函数

三、使用上下文无关文法定义 C++ 语言子集

(1)简介

上下文无关文法,是一种用来描述语言语法规则的文法,属于 2 型文法 (产生式左边有且仅有一个非终结符,右边可以含有若干个终结符和非终结符)。

上下文无关文法是一个四元组,由终结符、非终结符、开始符号、产生式构成。

  • 终结符构成句子的实际内容。词法单元

  • 非终结符表示在句子中不同的短语或者子句,体现出语言的层次结构,实质是由单个或多个终结符构成。语法变量

  • 开始符号存在且唯一,属于非终结符.

  • 产生式定义了终结符、非终结符之间的关系和层次,是上下文无关文法的基本规则。产生式主要用来表示某个构造的某种书写方式,也可以检验某一字符串是否符合该文法。

(2)tokens

1、标识符

其命名规则为:字母、下划线开头,后跟任意长度的字母、数字或下划线字符。 i d 1 ⟶   _ ∣   a ∣ b ∣ c ∣ . . . ∣ z ∣   A ∣ B ∣ C ∣ . . . ∣ Z i d 2 ⟶   _   a ∣ b ∣ c ∣ . . . ∣ z ∣   A ∣ B ∣ C ∣ . . . ∣ Z ∣   0 ∣ 1 ∣ 2 ∣ . . . ∣ 9 i d ⟶   i d 1 ∣   i d   i d 2 \begin{aligned} id1 \longrightarrow &\ \_\\ &|\ a|b|c|...|z\\ &|\ A|B|C|...|Z\\ id2 \longrightarrow &\ \_\\ &\ a|b|c|...|z\\ &|\ A|B|C|...|Z\\ &|\ 0|1|2|...|9\\ id \longrightarrow &\ id1\\ &|\ id\ id2 \end{aligned} id1id2id _ abc...z ABC...Z _ abc...z ABC...Z 012...9 id1 id id2

id1 可以是字母 (大小写)、下划线;id2 可以是字母 (大小写)、下划线、数字。id 是由字母、下划线开头,后跟若干个字母、下划线、数字组成

(3)声明语句

1、变量声明

s t o r e ⟶   a u t o ∣   r e g i s t e r ∣   s t a t i c ∣   e x t e r n ∣   ϵ t y p e ⟶   i n t ∣   b o o l ∣   f l o a t ∣   d o u b l e ∣   c h a r ∣   c h a r ∗ ∣   s t r i n g i d l i s t ⟶   i d ,   l i s t ∣   i d d e c l ⟶ s t o r e   t y p e   i d l i s t \begin{aligned} store \longrightarrow & \ auto|\ register|\ static|\ extern |\ \epsilon\\ type \longrightarrow & \ int|\ bool|\ float|\ double|\ char|\ char*|\ string\\ idlist \longrightarrow & \ id,\ list|\ id\\ decl \longrightarrow & store\ type\ idlist \end{aligned} storetypeidlistdecl auto register static extern ϵ int bool float double char char string id, list idstore type idlist store 表示变量的作用域,type 表示变量类型,idlist 表示标识符列表,decl 表示声明语句

2、常量声明

  • 分为8进制, 10进制,16进制的常量 i n t e g e r − c o n s t ⟶   d e c i m a l − c o n s t ∣   o c t a l − c o n s t ∣   h e x a d e c i m a l − c o n s t d e c i m a l − c o n s t ⟶   n o n z e r o − d i g i t ∣   d e c i m a l − c o n s t d i g i t o c t a l − c o n s t ⟶   O ∣   o c t a l − c o n s t o c t a l − d i g i t h e x a d e c i m a l − c o n s t ⟶   h e x a d e c i m a l − p r e f i x   h e x a d e c i m a l − d i g i t ∣   h e x a d e c i m a l − c o n s t   h e x a d e c i m a l − d i g i t h e x a d e c i m a l − p r e f i x ⟶   ′ 0 x ′ ∣   ′ 0 X ′ n o n z e r o − d i g i t ⟶   1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 o c t a l − d i g i t ⟶   0 ∣ 1 ∣ 2 ∣ 3 ∣ 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joshua_yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值