注重版权,若要转载烦请附上作者和链接
作者: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} id1⟶id2⟶id⟶ _∣ a∣b∣c∣...∣z∣ A∣B∣C∣...∣Z _ a∣b∣c∣...∣z∣ A∣B∣C∣...∣Z∣ 0∣1∣2∣...∣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} store⟶type⟶idlist⟶decl⟶ 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