第二章笔记

这篇博客详细介绍了C++的基础知识,包括基本数据类型、常量和变量的定义,以及运算符的使用,如算术、关系和逻辑运算符。还涵盖了表达式的种类和语句的类型,如条件语句、循环语句以及输入输出流的控制。同时,文章提及了如何设置浮点数的精度和字段宽度等格式控制符。

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

1. C++的基本数据类型

 

2.常量

3.变量

命名:标识符规则 第一个字符是字母或下划线(字母、数字、下划线)

先定义后使用

常变量 const int a

4.运算符

算术运算符:+ - * ++ --%(要求操作数与结果均为整数)

关系运算符:> < == >= <=

逻辑运算符:&& || !(非)

按位运算符

赋值运算符:=(复合赋值运算符:a*=2就是a=a*2)

条件运算符:?:

逗号运算符:,

指针运算符:*

求字节数运算符:sizeof

强制类型转换运算符:(f=double(1)/3

下标运算符:【】

5.表达式的种类

算术表达式:a+5.2/3.0-9%5

逻辑表达式:!a&&8||7

关系表达式:‘m’>'x'

赋值表达式:a=7

条件表达式:a>4?++a:--a

逗号表达式:a+5,a=7,a+=4是最后一个表达式的值

n=x<y 真为1,假为0

非0即为真,0为假

int (3.14)   (int)3.14

6.语句

声明语句

执行语句:i++  i=i+1

函数和流对象调用语句:max(x,y)  cout<<x;

控制语句:条件:if else

                 循环:for()  while() do while()

                  break   continue  switch  goto  return

空语句:;

复合语句{}

输入流输出流语句

#include<iomanip>

控制符

作用

dec

设置数值的基数为10

hex

设置数值的基数为16

oct

设置数值的基数为8

setfill(c)

设置填充字符c,c可以是字符常量或字符变量

setprecision(n)

设置浮点数的精度为n位。在以一般十进制小数形式输出时,n代

表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形

式输出时,n为小数位数

setw(n)

设置字段宽度为n位

setiosflags(ios:fixed)

设置浮点数以固定的小数位数显示

setiosflags(ios:scientific)

设置浮点数以科学记数法(即指数形式)显示

setiosflags(ios:left)

输出数据左对齐

setiosflags(ios:right)

输出数据右对齐

setiosflags(ios:skipws)

忽略前导的空格

setiosflags(ios:uppercase)

数据以十六进制形式输出时字母以大写表示

setiosflags(ios::lowercase)

数据以十六进制形式输出时字母以小写表示

setiosflags(ios:showpos)

输出

正数时给出“+”号

#include <iostream>
using namespace std;
int main()
{
char a,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);
putchar(66);putchar(79);putchar(89);putchar(10);
return 0;
}

putchar getchar

运行结果:BOY

BOY

#include <iostream>
using namespace std;
int main( )
{
  char c;
  c=getchar( ); putchar(c+32); putchar('\n');
  return 0;
}

<think>嗯,用户让我介绍《编译原理(第三版)》清华大学出版社第二章笔记。首先,我需要确认这本书的作者是谁,可能是不是陈火旺或者其他人?不过可能用户没有提到具体作者,但第三版应该是比较经典的版本。第二章通常是词法分析部分,但不同教材的结构可能有所不同,所以得先回忆一下常见的编译原理教材结构。比如,龙书(紫皮书)的第一章是引言,第二章可能开始词法分析,而其他教材可能结构不同。但清华大学出版社的版本,可能需要查证一下。不过用户可能指的是张素琴等编写的《编译原理》第三版,清华大学出版社,常见的章节安排。 假设第二章是关于词法分析的话,通常会包括词法分析的作用、正则表达式、有限自动机(DFA、NFA)、从正则表达式到NFA的转换,NFA到DFA的转换,DFA的最小化,以及词法分析器的生成工具如Lex。但需要更准确地确认内容。 不过用户可能希望得到一个结构清晰的笔记,所以需要分点列出。根据系统指令,要使用中文,注意数学公式的格式,行内用$...$,独立公式用$$...$$。同时要确保内容正确,比如正则表达式的定义、自动机的转换步骤是否正确。 另外,用户可能需要的是重点知识总结,而不是详细的内容。因此需要提炼关键概念,比如词法分析的任务、单词的分类、正则表达式、有限自动机、算法(子集构造法、最小化算法)、Lex工具等。 可能需要注意常见的错误点,比如确定有限自动机非确定有限自动机的区别,NFA到DFA的转换过程,以及最小化的步骤。另外,正则表达式与自动机的关系也是重点。 需要检查是否有遗漏的部分,比如词法分析中的错误处理,或者某些具体例子,比如如何用正则表达式描述标识符、数字等。此外,可能还要提到词法分析器的输出形式,比如词法单元序列,属性值等。 最后,组织内容时按照逻辑顺序,先介绍任务作用,然后正则表达式,接着自动机,转换算法,最后工具。确保每个部分简明扼要,重点突出,符合用户的笔记需求。</think>以下为《编译原理(第三版)》(清华大学出版社)第二章内容的系统性笔记整理,按核心知识点分层归纳: --- ### 第二章:词法分析 #### 1. 词法分析的任务与作用 - **输入**:源代码字符串(字符流) - **输出****: 词法单元序列(Token序列),格式为:$(\text{种别码}, \text{属性值})$ - **核心功能**: - 过滤注释与空白符 - 识别单词并分类(如标识符、常量、运算符等) - 错误检测(如非法字符) --- #### 2. 单词的分类与描述 - **单词类别**: - **关键字**:具有固定含义的单词(如 `if`, `while`) - **标识符**:用户定义的名称,需满足正则规则:$[a-zA-Z][a-zA-Z0-9]*$ - **常量**:整型、浮点型、字符串等(如 `123`, `"hello"`) - **运算符**:`+`, `-`, `*`, `/` 等 - **界符**:`;`, `(`, `)` 等 --- #### 3. 正则表达式(RE) - **定义**:描述单词构成规则的符号系统 - **基本运算**: - 并:$A|B$(A或B) - 连接:$AB$(A后接B) - 闭包:$A^*$(A重复0次或多次) - **扩展语法**: - `[0-9]` 等价于 $0|1|…|9$ - `A+` 等价于 $AA^*$ - `A?` 等价于 $A|\varepsilon$ --- #### 4. 有限自动机(Finite Automata) - **非确定有限自动机(NFA)**: - 定义:五元组 $(Q, \Sigma, \delta, q_0, F)$ - 特点:允许$\varepsilon$-转移,同一状态对同一字符有多个转移 - **确定有限自动机(DFA)**: - 定义:五元组 $(Q, \Sigma, \delta, q_0, F)$ - 特点:无$\varepsilon$-转移,每个状态对每个字符有唯一转移 --- #### 5. 正则表达式到自动机的转换 - **Thompson算法**: 1. 将正则表达式分解为基本单元(字符、空串) 2. 递归构建NFA(通过连接、并、闭包操作组合子NFA) **示例**:正则表达式 `a(b|c)*` 的NFA构造 (此处可插入NFA状态图描述) --- #### 6. NFA到DFA的转换(子集构造法) - **步骤**: 1. 计算NFA初始状态的$\varepsilon$-闭包 2. 对每个未处理的状态集合$T$,计算所有字符输入后的转移闭包 3. 生成DFA状态,直到无新状态产生 **公式表示**: $$ \delta_{\text{DFA}}(T, a) = \varepsilon\text{-closure}\left( \bigcup_{q \in T} \delta_{\text{NFA}}(q, a) \right) $$ --- #### 7. DFA最小化(划分法) - **目标**:合并等价状态,减少DFA状态数 - **步骤**: 1. 将状态分为接受态非接受态 2. 递归细分集合,直到同一集合内状态对所有输入字符的转移目标属于同一集合 --- #### 8. 词法分析器生成工具(Lex/Flex) - **工作原理**: - 输入:正则规则与动作代码 - 输出:可识别Token的C程序 - **文件结构**: ```lex %{ // 声明部分(头文件、变量) %} // 正则定义段 digit [0-9] %% // 规则段 {digit}+ { printf("整数: %s", yytext); } %% // 用户代码段 ``` --- #### 9. 关键问题总结 - **冲突解决**:最长匹配原则 & 优先级规则 - **错误处理**:跳过非法字符并报错 - **性能优化**:预计算转移表加速DFA执行 --- 如需更详细的公式推导或实例分析,可指定具体知识点进一步展开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值