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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时