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学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常