您的位置:首页 > 其它

编译原理Tiny语言的定义

2013-07-17 10:54 531 查看
Here is the definition for Tiny language

The Tiny lexicon is as follows:

Keywords:
  IF ELSE WRITE READ RETURN BEGIN END MAIN INT REAL


Single-character separators:
;  ,
(
)


Single-character operators:
+  -
*
/


Multi-character operators:
:=  ==   !=


Identifier: An identifier consists of a letter followed by any number of letters or digits. The following are examples of identifiers: x, x2, xx2, x2x, End, END2.Note that End is an identifier while END is a keyword. The following are not identifiers:

IF, WRITE, READ, ...
. (keywords are not counted as identifiers)

2x
(identifier can not start with a digit)

Strings in comments are not identifiers.

Number is a sequence of digits, or a sequence of digits followed by a dot, and followed by digits.
Number -> Digits | Digits '.' Digits
Digits -> Digit | Digit Digits
Digit  -> '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'


Comments: string between /** and **/. Comments can be longer than one line.

The EBNF Grammar

High-level program structures

Program -> MethodDecl MethodDecl*
MethodDecl -> Type [MAIN] Id '(' FormalParams ')' Block
FormalParams -> [FormalParam ( ',' FormalParam )* ]
FormalParam -> Type Id

Type -> INT | REAL

Statements

Block -> BEGIN Statement* END

Statement -> Block
| LocalVarDecl
| AssignStmt
| ReturnStmt
| IfStmt
| WriteStmt
| ReadStmt

LocalVarDecl -> INT Id ';' | REAL Id ';'

AssignStmt  -> Id := Expression ';'
ReturnStmt -> RETURN Expression ';'
IfStmt    -> IF '(' BoolExpression ')' Statement
| IF '(' BoolExpression ')' Statement ELSE Statement
WriteStmt -> WRITE '(' Expression ',' QString ')' ';'
ReadStmt  -> READ '(' Id ',' QString ')' ';'
QString is any sequence of characters except double quote itself, enclosed in double quotes.

Expressions

Expression -> MultiplicativeExpr  (( '+' | '-' ) MultiplicativeExpr)*
MultiplicativeExpr -> PrimaryExpr (( '*' | '/' ) PrimaryExpr)*
PrimaryExpr -> Num  // Integer or Real numbers
| Id
| '(' Expression ')'
| Id '(' ActualParams ')'
BoolExpression -> Expression '==' Expression
|Expression '!=' Expression
ActualParams -> [Expression ( ',' Expression)*]

Sample program

/** this is a comment line in the sample program **/
INT f2(INT x, INT y )
BEGIN
INT z;
z := x*x - y*y;
RETURN z;
END
INT MAIN f1()
BEGIN
INT x;
READ(x, "A41.input");
INT y;
READ(y, "A42.input");
INT z;
z := f2(x,y) + f2(y,x);
WRITE (z, "A4.output");
END


转自:http://cs.uwindsor.ca/~jlu/214/language.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: