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