编译原理:TINY语言的语法、词法单元与文法的最全总结

下面是一段YINY语言源代码:

{ Sample program
  in TINY language -
  computes factorial
}
read x; { input an integer }
if 0 < x then { don't compute if x <= 0 }
  fact := 1;
  repeat
    fact := fact * x;
    x := x - 1
  until x = 0;
  write fact  { output factorial of x }
end

在学习编译原理时,由于网上没有对TINY词法与文法的总结,这一块自己摸索很久。现在分享给大家,这里是乔卿的博客。下面对TINY语言的语法、词法单元与文法进行总结,涉及到编译原理中的词法分析、语法分析。

TINY语言的语法为:

  1. 注释:放在一对大括号内,不能嵌套;
  2. 关键字:read write if end repeat until else;
  3. 类型:只支持整型和布尔型;
  4. 运算符:+ - * / ( ) < = :=,其中:=为赋值运算,=为判断。没有>和<=和>=。

TINY的词法单元为:

词法单元类型

词法单元

词素(例)

关键字

(预定义符)

IF

if

THEN

then

ELSE

else

END

end

REPEAT

repeat

UNTIL

until

READ

read

WRITE

write

自定义符

ID

myName

NUM

123

运算符

ASSIGN

:=

EQ

=

LT

<

PLUS

+

MINUS

-

TIMES

*

OVER

/

LPAREN

(

RPAREN

)

SEMI

;

错误

ERROR

>=

TINY的文法为:

非终结符

含义

展开

program

程序

stmt_seq

stmt_seq

若干条语句

stmt_seq SEMI stmt | stmt

stmt

单条语句

if_stmt | repeat_stmt | assign_stmt | read_stmt | write_stmt | error

if_stmt

判断语句

IF exp THEN stmt_seq END | IF exp THEN stmt_seq ELSE stmt_seq END

repeat_stmt

循环语句

REPEAT stmt_seq UNTIL exp

assign_stmt

赋值语句

ID ASSIGN exp

read_stmt

输入语句

READ ID

write_stmt

输出语句

WRITE exp

exp

判断表达式

simple_exp LT simple_exp | simple_exp EQ simple_exp| simple_exp

simple_exp

加减表达式

simple_exp PLUS term | simple_exp MINUS term | term

term

乘除表达式

term TIMES factor | term OVER factor | factor

factor

括号表达式

LPAREN exp RPAREN | NUM | ID | error

即:

program->stmt_seq
stmt_seq->stmt_seq;stmt
stmt_seq->stmt
stmt->if_stmt
stmt->repeat_stmt
stmt->assign_stmt
stmt->read_stmt
stmt->write_stmt
stmt->error
if_stmt->IF exp THEN stmt_seq END
if_stmt->IF exp THEN stmt_seq ELSE stmt_seq END
repeat_stmt->REPEAT stmt_seq UNTIL exp
assign_stmt->ID:=exp
read_stmt->READ ID
write_stmt->WRITE exp
exp->simple_exp<simple_exp
exp->simple_exp=simple_exp
simple_exp->simple_exp+term
simple_exp->simple_exp-term
term->term*factor
term->term/factor
factor->(exp)
factor->NUM
factor->ID
factor->error

如果这篇文章对你有帮助,请给博主点个赞吧!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41112170/article/details/106880776
本文作者:乔卿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章