PL/0文法的EBNF表示
EBNF表示的符号说明。
‘< >’ 用左右尖括号括起来的中文字表示语法构造成分,或称语法单位,为非终结符。 ‘::=’ 该符号的左部由右部定义,可读作“定义为”。 ‘|’ 表示“或”,为左部可由多个右部定义。
‘{ }’ 表示花括号内的语法成分可以重复。在不加上下界时可重复0到任意次数,有上下界时为可重复次数的限制。
‘[ ]’ 表示方括号内的成分为任选项。 ‘( )’ 表示圆括号内的成分优先。 上述符号称“元符号”,定义文法用到上述符号作为文法符号时需要引号 ‘’括起。
PL/0语言文法的EBNF表示: <程序>::=<分程序>.
<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分>::=CONST<常量定义>{,<常量定义>}; <常量定义>::=<标识符>=<无符号整数> <无符号整数>::=<数字>{<数字>}
<变量说明部分>::=VAR<标识符>{,<标识符>}; <标识符>::=<字母>{<字母>|<数字>}
<过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}; <过程首部>::=PROCEDURE<标识符>;
<语句>::=<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句>::=<标识符>:=<表达式>
<复合语句>::=BEGIN<语句>{;<语句>}END
<条件>::=<表达式><关系运算符><表达式>|ODD<表达式> <表达式>::=[+|-]<项>{<加法运算符><项>} <项>::=<因子>{<乘法运算符><因子>}
<因子>::=<标识符>|<无符号整数>| ‘(’<表达式> ‘)’ <加法运算符>::=+|- <乘法运算符>::=*|/
<关系运算法>:===|#|<|<=|>|>=
<条件语句>:=IF<条件>THEN<语句> <过程调用语句>::=CALL<标识符>
<当型循环语句>::=WHILE<条件>DO<语句> <读语句>::=READ‘(’<标识符>{,<标识符>} ‘)’ <写语句>::=WRITE‘(’<表达式>{,<表达式>} ‘)’ <字母>::=a|b|„„|X|Y|Z <数字>::=0|1|2|„„|8|9
EBNF表示的符号说明。
‘< >’ 用左右尖括号括起来的中文字表示语法构造成分,或称语法单位,为非终结符。 ‘::=’ 该符号的左部由右部定义,可读作“定义为”。 ‘|’ 表示“或”,为左部可由多个右部定义。
‘{ }’ 表示花括号内的语法成分可以重复。在不加上下界时可重复0到任意次数,有上下界时为可重复次数的限制。
‘[ ]’ 表示方括号内的成分为任选项。 ‘( )’ 表示圆括号内的成分优先。 上述符号称“元符号”,定义文法用到上述符号作为文法符号时需要引号 ‘’括起。
PL/0语言文法的EBNF表示: <程序>::=<分程序>.
<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分>::=CONST<常量定义>{,<常量定义>}; <常量定义>::=<标识符>=<无符号整数> <无符号整数>::=<数字>{<数字>}
<变量说明部分>::=VAR<标识符>{,<标识符>}; <标识符>::=<字母>{<字母>|<数字>}
<过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}; <过程首部>::=PROCEDURE<标识符>;
<语句>::=<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句>::=<标识符>:=<表达式>
<复合语句>::=BEGIN<语句>{;<语句>}END
<条件>::=<表达式><关系运算符><表达式>|ODD<表达式> <表达式>::=[+|-]<项>{<加法运算符><项>} <项>::=<因子>{<乘法运算符><因子>}
<因子>::=<标识符>|<无符号整数>| ‘(’<表达式> ‘)’ <加法运算符>::=+|- <乘法运算符>::=*|/
<关系运算法>:===|#|<|<=|>|>=
<条件语句>:=IF<条件>THEN<语句> <过程调用语句>::=CALL<标识符>
<当型循环语句>::=WHILE<条件>DO<语句> <读语句>::=READ‘(’<标识符>{,<标识符>} ‘)’ <写语句>::=WRITE‘(’<表达式>{,<表达式>} ‘)’ <字母>::=a|b|„„|X|Y|Z <数字>::=0|1|2|„„|8|9