Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_2_Лексические_основы_С++.doc
Скачиваний:
11
Добавлен:
04.11.2018
Размер:
582.66 Кб
Скачать

Разделители

Компилятор, выполняя лексический анализ программы на языке С++, для распознания начала и (или) конца лексем использует разделители.

Функции разделителей:

 обозначение места начала и конца лексем;

 исключение из компиляции всех избыточных символов, не входящих в состав лексем.

Разделители лексем:

    • Пробельные разделители

    • Знаки операций (они сами есть лексемы)

    • Знаки пунктуации (они сами есть лексемы)

Пробельные разделители

К пробельным разделителям относятся неизображаемые символы и комментарии. Пробельные разделители не обрабатываются компилятором и игнорируются им.

В общем случае пробельных разделителей может быть произвольное число (как ни одного, так и любое их количество). Хороший стиль предполагает наличие хотя бы одного такого символа после каждой лексемы.

Комментарий не является лексемой и трактуется компилятором как пробельный разделитель. Многострочный комментарий отмечается символами “/*” в начале и “*/” в конце выделяемого текста. Признаком однострочного комментария являются символы ”//” в начале строки программы. Однострочный комментарий удобно использовать как пояснение к тексту оператора. Например:

int a; // текст, поясняющий назначение переменной

Символы комментария необходимо отделять от текста программы пробелом. В противном случае, текст программы может неправильно интерпретироваться компилятором.

Символы комментария необходимо отделять от текста программы пробелом.

Например, запись без пробелов:

int i = j //*деление на k*/k +m; будет распознана неправильно, как int i = j + m; (как имеющая однострочный комментарий), Запись с пробелами:

int i = j / /*деление на k*/ k +m;

будет распознана правильно, как int i = j / j / k+m; (как имеющая многострочный комментарий).

Комментарии не могут быть вложенными, т.к. в тексте однострочного комментария символы многострочного комментария /* игнорируются (воспринимаются как обычные символы). Точно также игнорируются (воспринимаются как обычные) в тексте многострочного комментария символы однострочного комментария //.

ASCII-Коды (символы с кодами 0-127)

01111111

dec

hex

char

dec

hex

char

dec

hex

char

0

0

46

2E

.

92

5C

\

1

1

47

2F

/

93

5D

]

2

2

48

30

0

94

5E

^

3

3

49

31

1

95

5F

_

4

4

50

32

2

96

60

'

5

5

51

33

3

97

61

a

6

6

52

34

4

98

62

b

7

7

звонок

53

35

5

99

63

c

8

8

54

36

6

100

64

d

9

9

55

37

7

101

65

e

10

A

перевод строки

56

38

8

102

66

f

11

B

57

39

9

103

67

g

12

C

58

3A

:

104

68

h

13

D

возврат каретки

59

3B

;

105

69

i

14

E

60

3C

<

106

6A

j

15

F

61

3D

=

107

6B

k

16

10

62

3E

>

108

6C

l

17

11

63

3F

?

109

6D

m

18

12

64

40

@

110

6E

n

19

13

65

41

A

111

6F

o

20

14

66

42

B

112

70

p

21

15

67

43

C

113

71

q

22

16

68

44

D

114

72

r

23

17

69

45

E

115

73

s

24

18

70

46

F

116

74

t

25

19

71

47

G

117

75

u

26

1A

72

48

H

118

76

v

27

1B

73

49

I

119

77

w

28

1C

74

4A

J

120

78

x

29

1D

75

4B

K

121

79

y

30

1E

76

4C

L

122

7A

z

31

1F

77

4D

M

123

7B

{

32

20

пробел

78

4E

N

124

7C

¦

33

21

!

79

4F

O

125

7D

}

34

22

''

80

50

P

126

7E

~

35

23

#

81

51

Q

127

7F

del

36

24

$

82

52

R

37

25

%

83

53

S

38

26

&

84

54

T

39

27

'

85

55

U

40

28

(

86

56

V

41

29

)

87

57

W

42

2A

*

88

58

X

43

2B

+

89

59

Y

44

2C

,

90

5A

Z

45

2D

-

91

5B

[

01111111


Кодовая таблица 866 – MS-DOS

(символы с кодами 127-255)

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

128

80

А

150

96

Ц

172

AC

м

193

C1

214

D6

235

EB

ы

129

81

Б

151

97

Ч

173

AD

н

194

C2

215

D7

236

EC

ь

130

82

В

152

98

Ш

174

AE

о

195

C3

216

D8

237

ED

э

131

83

Г

153

99

Щ

175

AF

п

196

C4

217

D9

238

EE

ю

132

84

Д

154

9A

Ъ

176

B0

-

197

C5

218

DA

239

EF

я

133

85

Е

155

9B

Ы

177

B1

-

198

C6

219

DB

240

F0

Ё

134

86

Ж

156

9C

Ь

178

B2

-

199

C7

220

DC

241

F1

ё

135

87

З

157

9D

Э

179

B3

200

C8

221

DD

242

F2

136

88

И

158

9E

Ю

180

B4

201

C9

222

DE

243

F3

137

89

Й

159

9F

Я

181

B5

202

CA

223

DF

244

F4

138

8A

К

160

A0

а

182

B6

203

CB

224

E0

р

245

F5

139

8B

Л

161

A1

б

183

B7

204

CC

225

E1

с

246

F6

+

140

8C

М

162

A2

в

184

B8

205

CD

226

E2

т

247

F7

141

8D

Н

163

A3

г

185

B9

206

CE

227

E3

у

248

F8

142

8E

О

164

A4

д

186

BA

207

CF

228

E4

ф

249

F9

143

8F

П

165

A5

е

187

BB

208

D0

229

E5

х

250

FA

144

90

Р

166

A6

ж

188

BC

209

D1

230

E6

ц

251

FB

145

91

С

167

A7

з

189

BD

210

D2

231

E7

ч

252

FC

n

146

92

Т

168

A8

и

190

BE

211

D3

232

E8

ш

253

FD

2

147

93

У

169

A9

й

191

BF

212

D4

233

E9

щ

254

FE

148

94

Ф

170

AA

к

192

C0

213

D5

234

EA

ъ

255

FF

149

95

Х

171

AB

л

 

 

 


Кодовая таблица 1251 – MS Windows

(символы с кодами 127-255, даны выборочно)

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

dec

hex

char

128

80

150

96

172

AC

¬

193

C1

Б

214

D6

Ц

235

EB

л

129

81

151

97

173

AD

-

194

C2

В

215

D7

Ч

236

EC

м

130

82

152

98

174

AE

®

195

C3

Г

216

D8

Ш

237

ED

н

131

83

153

99

175

AF

Ï

196

C4

Д

217

D9

Щ

238

EE

о

132

84

154

9A

176

B0

º

197

C5

Е

218

DA

Ъ

239

EF

п

133

85

155

9B

177

B1

±

198

C6

Ж

219

DB

Ы

240

F0

р

134

86

156

9C

178

B2

199

C7

З

220

DC

Ь

241

F1

с

135

87

157

9D

179

B3

i

200

C8

И

221

DD

Э

242

F2

т

136

88

158

9E

180

B4

r

201

C9

Й

222

DE

Ю

243

F3

у

137

89

159

9F

181

B5

μ

202

CA

К

223

DF

Я

244

F4

ф

138

8A

160

A0

182

B6

203

CB

Л

224

E0

а

245

F5

х

139

8B

161

A1

Ў

183

B7

.

204

CC

М

225

E1

б

246

F6

ц

140

8C

162

A2

ў

184

B8

ë

205

CD

Н

226

E2

в

247

F7

ч

141

8D

163

A3

J

185

B9

206

CE

О

227

E3

г

248

F8

ш

142

8E

164

A4

186

BA

ε

207

CF

П

228

E4

д

249

F9

щ

143

8F

165

A5

¤

187

BB

»

208

D0

Р

229

E5

е

250

FA

ъ

144

90

166

A6

¦

188

BC

j

209

D1

С

230

E6

ж

251

FB

ы

145

91

167

A7

§

189

BD

S

210

D2

Т

231

E7

з

252

FC

ь

146

92

168

A8

Ё

190

BE

s

211

D3

У

232

E8

и

253

FD

э

147

93

169

A9

©

191

BF

ï

212

D4

Ф

233

E9

й

254

FE

ю

148

94

170

AA

Є

192

C0

А

213

D5

Х

234

EA

к

255

FF

я

149

95

171

AB

«

 䦋㌌㏒

 䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

 䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

 䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

 䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü


1 Из соображений удобства кодирования и из технических соображений пользуются равномерными кодами, т.е. двоичными группами равной длины. При использовании 8 двоичных знаков (1 байт) получим 256 комбинаций двоичных символов. Одной из распространенных систем «байтового» кодирования является ASCII (American Stаndard Cod Information Interchange, произносим «аскей»). Но эта система является международной (общепринятой) только в первой половине кодов (от 0 до 127), вторая половина кодов (от 128 до 255) является национальной и различна для разных стран (см. таблицы кодов в конце лекции).

Программист, используя в программах, выполняемых в консольном режиме, строковые и символьные константы с русскими буквами, сталкивается с проблемой различия кодировок. В консольном режиме примеряется ОЕМ-кодировка, в которой для представления символов со значениями кодов 128-255 используется кодовая таблица 866 – MS DOS. В программах, исполняемых и создаваемых под управлением MS Windows, применяется для тех же символов кодовая таблица 1251 (ANSI-кодировка). Поэтому текст с русскими буквами (их коды находятся в диапазоне 128-255), подготовленный к редакторе MS Windows, нельзя правильно отобразить в консольном окне – нужна перекодировка из MS Windows в MS DOS и обратно.

18

Программирование – лекция 2 (лекции Стрикелевой Л.В.)