SimplePascal Grammar 〖全图灵编译器项目组〗 (Lyt更新)---摘录

SimplePascal Grammar

Lyt

 

一、简介

1.         数据类型:整型integer、浮点型real、布尔型boolean

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

3.         大小写不敏感

二、词法

1.         关键字

词法单元

记号

说明

function

keywordFUNCTION

函数(有返回值)

procedure

keywordPROCEDURE

函数(无返回值)

var

keywordVAR

声明变量

integer

keywordINTEGER

整型

real

keywordREAL

浮点型

boolean

keywordBOOLEAN

布尔型

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]+

布尔值

keywordFALSE;keywordTRUE

false;true

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 → PrimitiveType 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^)

(4)       变量类型

VariableType → ID

2.         变量声明:在全局区域或函数中

VariableDeclaration → keywordVAR (VariableDeclarationItem)+

VariableDeclarationItem →

VariableList operatorCOLON DataType operatorSEMICOLON

VariableList → ID (operatorCOMMA ID)*

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

3.         表达式

Expression →

PrimitiveExpression | InvokeExpression | CastExpression | SizeOfExpression |

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)       一元表达式

a)         not:UnaryExpression → keywordNOT Expression

如:not true

b)         取址:UnaryExpression → operatorADDRESS Expression

如:@pointer

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

如:pointer^

(6)       二元表达式

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

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

1

or

2

and

3

<  >  <=  >=  =  <>

4

+  -

5

*  /

6

not  -(一元)

7

@

4.         语句

Statement →

ExpressionStetement | AssignStatement | ReturnStatement | IfStatement |

WhileStatement | RepeatStatement | ControlStatement | BlockStatement

(1)       表达式语句

ExpressionStatement → Expression operatorSEMICOLON

如:Run();

(2)       赋值语句

AssignStatement → Expression operatorASSIGN Expression operatorSEMICOLON

如: pointer^ = 1;

(3)       return语句

a)         function

ReturnStatement → keywordRETURN Expression operatorSEMICOLON

如:return true;

b)         procedure:ReturnStatement → keywordRETURN operatorSEMICOLON

(4)       if语句

IfStatement →

keywordIF operatorLEFT Expression operatorRIGHT

keywordTHEN Statement

(keywordELSE Statement)?

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

(5)       while语句

WhileStatement →

         keywordWHILE operatorLEFT Expression operatorRIGHT keywordDO

Statement

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

(6)       repeat语句

RepeatStatement →

keywordREPEAT Statement

keywordUNTIL operatorLEFT Expression operatorRIGHT operatorSEMICOLON

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

(7)       控制语句

ControlStatement →(keywordBREAK | keywordCONTINUE) operatorSEMICOLON

(8)       语句块

BlockStatement →

keywordBEGIN (Statement)* keywordEND operatorSEMICOLON

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

a)         由begin和end包围,可包围0个或以上语句

b)         可以嵌套

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

5.         函数定义

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

FunctionProcedure → FunctionType (VariableDeclaration | EMPTY) BlockStatement

如:

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

var i,j:integer; k:real;

begin

{函数体}

end

(2)       procedure Fun2()

begin

{函数体}

end

转载于:https://www.cnblogs.com/Cwdf/archive/2010/07/07/1772992.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值