PL/0语言语法EBNF描述
时间: 2023-07-29 19:11:20 浏览: 80
以下是PL/0语言的EBNF描述:
```
<程序> ::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<无符号整数>
<无符号整数> ::= <数字>{<数字>}
<变量说明部分> ::= var<标识符>{,<标识符>};
<标识符> ::= <字母>{<字母>|<数字>}
<过程说明部分> ::= {<过程首部><分程序>;}
<过程首部> ::= procedure<标识符>;
<语句> ::= <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<重复语句>|<空>
<赋值语句> ::= <标识符>:=<表达式>
<条件> ::= <表达式><关系运算符><表达式>
<关系运算符> ::= =|<>|<|<=|>|>=
<条件语句> ::= if<条件>then<语句>[else<语句>]
<当型循环语句> ::= while<条件>do<语句>
<过程调用语句> ::= call<标识符>
<读语句> ::= read'('<标识符>{,<标识符>}')'
<写语句> ::= write'('<表达式>{,<表达式>}')'
<复合语句> ::= begin<语句>{;<语句>}end
<重复语句> ::= repeat<语句>{;<语句>}until<条件>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<加法运算符> ::= +|-
<项> ::= <因子>{<乘法运算符><因子>}
<乘法运算符> ::= *|/
<因子> ::= <标识符>|<无符号整数>|'('<表达式>')'
<空> ::=
```
其中,用尖括号括起来的是非终结符,其他的是终结符。特别地,`const`、`var`、`procedure`、`if`、`then`、`else`、`while`、`do`、`call`、`read`、`write`、`begin`、`end`、`repeat`、`until`、`+`、`-`、`*`、`/`、`=`、`<>`、`<`、`<=`、`>`、`>=`、`,`、`;`、`(`、`)`、`:=`、`{`、`}`、`<字母>`、`<数字>`、`<无符号整数>` 都是终结符。