SimplePascal Grammar

Lyt

一、简介

1.         数据类型:整型integer、浮点型real、布尔型boolean、指针、pointer(相当于C++void*

2.         有且只有一个main函数,从调用main函数开始执行程序

3.         大小写不敏感

二、词法

1.         关键字

词法单元

记号

说明

function

keywordFUNCTION

函数(有返回值)

procedure

keywordPROCEDURE

函数(无返回值)

var

keywordVAR

声明变量

result

keywordRESULT

函数的返回值

integer

keywordINTEGER

整型

real

keywordREAL

浮点型

boolean

keywordBOOLEAN

布尔型

pointer

keywordPOINTER

相当于C++void*

true

keywordTRUE

false

keywordFALSE

or

keywordOR

and

keywordAND

not

keywordNOT

while

keywordWHILE

 

do

keywordDO

 

repeat

keywordREPEAT

 

until

keywordUNTIL

 

break

keywordBREAK

 

continue

keywordCONTINUE

 

if

keywordIF

 

then

keywordTHEN

 

else

keywordELSE

 

begin

keywordBEGIN

模块开始

end

keywordEND

模块结束

sizeof

keywordSIZE_OF

获得某类型字节

2.         标识符:字母或下划线开头,由字母、下划线、数字构成

词法单元

记号

说明

标识符

ID

[_a-zA-Z]+([_0-9a-zA-Z])*

3.         字面量

词法单元

记号

说明

整数

valueINTEGER

[0-9]+

浮点数

valueREAL

[0-9]+.[0-9]+

布尔值

keywordFALSEkeywordTRUE

falsetrue

4.         操作符

词法单元

记号

正则表达式

逗号

operatorCOMMA

,

分号

operatorSEMICOLON

;

冒号

operatorCOLON

:

赋值号

operatorASSIGN

:=

指针

operatorPOINTER

^

取址

operatorADDRESS

@

operatorADD

+

operatorSUB

-

operatorMUL

*

operatorDIV

/

左括号

operatorLEFT

(

右括号

operatorRIGHT

)

等于

operatorEQUAL

=

不等于

operatorNOT_EQUAL

<> 

小于

operatorLESS_THAN

< 

大于

operatorLARGER_THAN

> 

小于等于

operatorLESS_EQUAL_THAN

<=

大于等于

operatorLARGER_EQUAL_THAN

>=

5.         注释:不能嵌套

正则表达式:{([^}])*}

三、语法

1.         类型

DataType PrimitiveType | PointerType | FunctionType | VariableType

(1)       基本类型

PrimitiveType keywordINTEGER | keywordREAL | keywordPBOOLEAN

(2)       指针类型

PointerType keywordPOINTER | DataType operatorPOINTER

如:integer^

(3)       函数类型

ParameterDeclaration ID operatorCOLON DataType

ParameterDeclarationList

(ParameterDeclaration (operatorSEMICOLON ParameterDeclaration)*) | EMPTY

a)         有返回值

FunctionType

keywordFUNCTION Expression

operatorLEFT ParameterDeclarationList operatorRIGHT

operatorCOLON DataType

                                     如:function GetValue(i:integer):integer

b)         无返回值

FunctionType

keywordPROCEDURE Expression

operatorLEFT ParameterDeclarationList operatorRIGHT

                                     如:procedure Run(i:integer; p:integer^)

2.         表达式

Expression

PrimitiveExpression | InvokeExpression | CastExpression | SizeOfExpression |

ResultExpression | UnaryExpression | BinaryExpression

(1)       基本表达式

PrimitiveExpression LiteralExpresssion | VariableExpression

a)         字面值表达式

A.        整数:LiteralExpresssion valueINTEGER

如:123

B.        浮点数:LiteralExpresssion valueREAL

如:12.3

C.        布尔值:LiteralExpresssion keywordFALSE | keywordTRUE

如:true

b)         变量表达式:VariableExpression ID

如:a

(2)       函数调用表达式

InvokeExpression Expression operatorLEFT ArgumentList operatorRIGHT

ArgumentList EMTPY | (Expression (operatorCOMMA Expression)*)

如:FunctionName(argument1, argument2)

(3)       强制转换表达式

CastExpression DataType operatorLEFT Expression operatorRIGHT

如:data指针平移一个整数距离integer^(integer(data)+sizeof(integer))

注:指针无法加减,只能强制转换成整数

(4)       sizeof表达式

SizeOfExpression

keywordSIZE_OF operatorLEFT (Expression | DataType) operatorRIGHT

                   如:sizeof(integer)

(5)       result表达式

ResultExpression keywordRESULT

(6)       一元表达式

a)         notUnaryExpression keywordNOT Expression

如:not true

b)         取址:UnaryExpression operatorADDRESS Expression

如:@pointer

c)         取指针指向的值:UnaryExpression Expression operatorPOINTER

如:pointer^

(7)       二元表达式

BinaryExpression OrExpression

OrExpression AndExpression (keywordOR AndExpression)*

AndExpression RelationExpression (keywordAND RelationExpression )*

RelationExpression

AddSubExpression ((operatorLESS | operatorLARGER | operatorLESS_THAN |

operator LARGER_THAN | operatorEQUAL | operator NOT_EQUAL) Expression)*

                            AddSubExpression

MulDivExpression ((operatorADD | operatorSUB) AddSubExpression)*

                            MulDivExpression

UnaryExpression ((operatorMUL | operatorDIV) UnaryExpression)*

                            SimpleExpression

                                     PrimitiveExpression | InvokeExpression | UnaryExpression |

                                     operatorLEFT Expression operatorRIGHT

                            如:IsAvailable() and (1+2)/3 = 1

(8)       操作符优先级(由低到高):括号可以改变优先级

1

or

2

and

3

<  >  <=  >=  =  <>

4

+  -

5

*  /

6

not  -(一元)

7

@

3.         语句

Statement

ExpressionStetement | AssignStatement | IfStatement |

WhileStatement | RepeatStatement | ControlStatement | BlockStatement

(1)       表达式语句

ExpressionStatement Expression operatorSEMICOLON

如:Run();

(2)       赋值语句

AssignStatement Expression operatorASSIGN Expression operatorSEMICOLON

如: pointer^ = 1;

(3)       if语句

IfStatement

keywordIF operatorLEFT Expression operatorRIGHT

keywordTHEN Statement

(keywordELSE Statement)?

                            如:if (true) then DoSomething(); else DoSomethingElse();

(4)       while语句

WhileStatement

         keywordWHILE operatorLEFT Expression operatorRIGHT keywordDO

Statement

                            如:while (IsAvailable()) do DoSomething();

(5)       repeat语句

RepeatStatement

keywordREPEAT Statement

keywordUNTIL operatorLEFT Expression operatorRIGHT operatorSEMICOLON

如:repeat DoSomething(); until (IsAvailable());

(6)       控制语句

ControlStatement (keywordBREAK | keywordCONTINUE) operatorSEMICOLON

(7)       语句块

BlockStatement

keywordBEGIN (Statement)* keywordEND operatorSEMICOLON

如:begin DoSomething(); DoSomethingElse(); end;

a)         beginend包围,可包围0个或以上语句

b)         可以嵌套

c)         在其所在层次上被视为一个语句

4.         函数定义

函数定义不能嵌套,只能在全局区域

FunctionProcedure FunctionHead (VariableDeclaration | EMPTY) BlockStatement

(1)       函数头

ParameterDeclaration ID operatorCOLON DataType

ParameterDeclarationList

(ParameterDeclaration (operatorSEMICOLON ParameterDeclaration)*) |

EMPTY

a)         有返回值

FunctionHead

keywordFUNCTION Expression

operatorLEFT ParameterDeclarationList operatorRIGHT

operatorCOLON DataType

                            如:function GetValue(i:integer):integer

b)         无返回值

FunctionHead

keywordPROCEDURE Expression

operatorLEFT ParameterDeclarationList operatorRIGHT

                            如:procedure Run(i:integer; p:integer^)

(2)       变量声明:只能在函数中

VariableDeclaration keywordVAR (VariableDeclarationItem)+

VariableDeclarationItem

VariableList operatorCOLON DataType operatorSEMICOLON

VariableList ID (operatorCOMMA ID)*

如:var i,j:integer; p:boolean;

函数定义如:

(1)       function Fun1(Param1:integer;Param2:integer):boolean

var i,j:integer; k:real;

begin

{函数体}

end

(2)       procedure Fun2()

begin

{函数体}

end