Free Pascal 学习笔记 第一章 语言符号 Pascal Tokens

2024-01-27 18:08

本文主要是介绍Free Pascal 学习笔记 第一章 语言符号 Pascal Tokens,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一章 语言符号 Pascal Tokens

第一节 语言符号

  1. 保留字 reserved words

这些单词具有固定的含义,不能被改变或重新定义

  1. 标识符 identifiers

程序员定义的符号,可以改变或重用,是语法规则的主体

  1. 操作符 operators

通常是数学符号或其它操作,如+ - * 等

  1. 分隔符 separators

通常是空格

  1. 常量 constants

在源码中通常用数字或字符常量来定义确定值

第二节 符号 symbols

Free Pascal允许字母、数字和特殊字符出现在源文件中

特殊字符

’ + - * / = < > [ ] . , ( ) : ^ @ { } $ # & %

特殊字符组合

<< >> ** <> >< <= >= := += -= *= /= (* *) (. .) //

第三节 注释 comments

  1. (*这是旧样式的注释*)

  2. {这是Turbo Pascal注释}

  3. //这是Delphi注释。直到行结束,所有内容都将被忽略。

  4. 嵌套注释的有效方法:

{评论1(*评论2 *)}
(*评论1 {评论2} *)
{评论1 //评论2}
(*评论1 //评论2 *)
//评论1(*评论2 *)
//评论1 {评论2}

  1. 两个注释必须在一行上。以下两个将给出错误:

//有效的评论{不再是有效的评论!!
}

备注:在TP或Delphi模式下,不允许嵌套注释

第四节 保留字 reserved words

一、Trubo Pascal保留字

 

absolute

and

array

asm

begin

break

case

const

constructor

continue

destructor

div

do

downto

else

end

file

for

function

goto

if

implementation

in

inherited

inline

interface

label

mod

nil

not

object

of

on

operator

or

packed

procedure

program

record

reintroduce

repeat

self

set

shl

shr

string

then

to

type

unit

until

uses

var

while

with

xor

2、Delphi 保留字

Delphi保留字跟Turbo Pascal一样,但是增加了如下内容:

as

class

except

exports

finalization

finally

initialization

is

library

on

property

raise

threadvar

try

3、Free Pascal 保留字

除了拥有Turbo Pascal和Delphi的保留字之外,Free Pascal还增加了下面的保留字:

dispose

exit

false

new

true

另外,Pascal有几个预先定义的标识符。你可以用你自己的定义来覆盖他们,但这样做你就没法使用这些标识符在Pascal中原来所具有的功能了。

abs

arctan

boolean

char

cos

dispose

eof

eoln

exp

false

input

integer

ln

maxint

new

odd

ord

output

pack

page

pred

read

readln

real

reset

rewrite

round

sin

sqr

sqrt

succ

text

true

trunc write

writeln

 

Pascal是不区分大小写的!MyProgramMYPROGRAMmYpRoGrAm这三者是完全相同的。但为了可读性考虑,最好有意义地使用大小写!

标识符长度可以是任意的,但是许多Pascal编译器实际上只看开头的大约32个字符。也就是说,下面两个标识符:

    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFAlphaBeta
    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGammaDelta
    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGammaDelta

可能对于某些编译器来说它们两者是相同的,因为第一个不同之处出现在第33个字符。

为了让你的代码兼容所有的编译器,使用合理长度的标识符——最多15个字符。这样,你打字的时候也省事。

4. 修饰符 modifiers

absolute

abstract

Alias

Assembler

Cdecl

Cppdecl

Default

Export

External

Far

Far16

Forward

Index

Local

Name

Near

Nostackframe

Oldfpccall

Override

Pascal

Private

protected

Public

Published

Read

Register

Reintroduce

Safecall

Softfloat

Stdcall

Virtual

write

备注诸如Byte,Boolean之类的预定义类型和诸如maxint之类的常量不是保留字。它们是在系统单元中声明的标识符。这意味着可以在其他单位中重新定义这些类型。但是,不鼓励程序员这样做,因为这会引起很多混乱。

备注从2.5.1版开始,可以通过用&符号转义保留字来将保留字用作标识符。这意味着以下是可能的

var &var:integer; begin &var:=1; Writeln(&var); end. 

但是,不建议在新代码中使用此功能,因为它会使代码的可读性降低。它主要用于在保留字列表更改并且包含尚未保留的字时修复旧代码

5.提示指令 Hint directives

大多数标识符(常量,变量,函数或方法,属性)可以在其定义后附加提示指令:

  1. deprecated 不推荐使用

不建议使用此标识符,而应使用替代方法。不推荐使用的关键字之后可以是带有消息的字符串常量。每当遇到标识符时,编译器都会显示此消息。

  1. Experimental 实验性的

此标识符的使用是实验性的:可用于标记应谨慎使用的新功能。

  1. Platform 平台

这是一个与平台有关的标识符:可能并非在所有平台上都定义了它。

  1. Unimplemented 未实现

仅应将其用于功能和过程。它应用于表示尚未实现特定功能。

示例:

Const
AConst=12deprecated;

var
p:integerplatform;

FunctionSomething:Integer;experimental;

begin
Something:=P+AConst;
end;

begin
Something;
end.

输出如下:

testhd.pp(11,15)Warning:Symbol"p"is not portable
testhd.pp(11,22)Warning:Symbol"Aconst" is deprecated
testhd.pp(15,3)Warning:Symbol"Something" is experimental

提示指令可以遵循各种标识符:单位,常量,类型,变量,函数,过程和方法。


 

6.数字表示

整数类型常量,Free Pascal支持四种格式:

  1. 正常的十进制格式(以10为基数)。这是标准格式。

  2. 十六进制格式(以16为底),方法与Turbo Pascal相同。要以十六进制格式指定常数值,请在其前面加上美元符号($)。因此,十六进制$ FF等于255十进制。请注意,使用十六进制常量时,大小写无关紧要。

  3. 从1.0.7版开始,还支持八进制格式(以8为基数)。要以八进制格式指定常数,请在其前面加上与号()。例如,八进制表示法中将15指定为&17。

  4. 二进制表示法(以2为底)。可以在二进制数前加上百分号()来指定二进制数。因此,可以二进制表示形式将255指定为%11111111。

备注TP或Delphi兼容模式不支持八进制和二进制表示法。

7.标签

标签是源代码中某个位置的名称,可以使用goto语句将其从另一个位置跳转到该位置。标签是标准标识符或数字序列。

备注该-Sg或-Mtp可以使用标签之前的开关必须被指定。默认情况下,Free Pascal不支持label和goto语句。该{$ GOTO ON}指令也可以用来允许使用标签和goto语句。

以下是有效标签的示例:

Label
123,
abc;

8.字符串

字符串(或简称为字符串)是零个或多个字符(字节大小)的序列,由标准的8位ASCII字符或Unicode(通常为UTF-8编码)字符组成。

  1. 用单引号括起来 ‘’

  2. 只能出现在程序源代码的单行中

  3. 字符串中不能出现回车符或换行符。可用#13 #10代替

  4. 字符集引号之间没有任何东西(‘’)是一个空字符串。

  5. 转义字符请使用 #,而不是C的反斜杠 \ 。

  6. 以通过键入两次将单引号字符嵌入到字符串中。

  7. 在字符串中使用其他字符集,必须使用 {$ CODEPAGE XXX} 伪指令或编译器的-Fc命令行选项指定源文件的代码页。使用{$ CodePage XXX}后,字符串中的字符将被解释为XXX代码页中的字符。


 


 

以下是有效的字符串常量:

’This is a pascal string’
’’
’a’
’A tabulator character: ’#9’ is easy to embed’

以下是无效的字符串:

’the string starts here
and continues here’

上面的字符串改成下面的示例则是正确的字符口中 :

’the string starts here’#13#10’ and continues here’

或者这样也行

’the string starts here’#10’ and continues here’

类unix系统包括Mac OS X则是如下形式

’the string starts here’#13’ and continues here’


 

这篇关于Free Pascal 学习笔记 第一章 语言符号 Pascal Tokens的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651068

相关文章

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1