PL/0语言文法:
<程序> ::= <分程序>.
<分程序> ::= [<常量说明部分>][变量说明部分>][<过程说明部分>]<语句>
<常量说明部分>::= CONST<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<无符号整数>
<无符号整数> ::= <数字>{<数字>}
<变量说明部分>::= VAR<标识符>{,<标识符>};
<标识符> ::= <字母>{<字母>|<数字>}
<过程说明部分>::= <过程首部><分程序>{;<过程说明部分>};
<过程首部> ::= PROCEDURE<标识符>;
<语句> ::= <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|
<读语句>|<写语句>|<复合语句>|<重复语句>|<空>
<赋值语句> ::= <标识符>:=<表达式>
<复合语句> ::= BEGIN<语句>{;<语句>}END
<条件> ::= <表达式><关系运算符><表达式>|ODD<表达式>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项> ::= <因子>{<乘法运算符><因子>}
<因子> ::= <标识符>|<无符号整数>|'('<表达式>')'
<加法运算符> ::= +|-
<乘法运算符> ::= *|/
<关系运算符> ::= =|#|<|<=|>|>=
<条件语句> ::= IF<条件>THEN<语句>[ELSE<语句>]
<过程调用语句>::= CALL<标识符>
<当型循环语句>::= WHILE<条件>DO<语句>
<重复语句> ::= REPEAT<语句>{;<语句>}UNTIL<条件>
<读语句> ::= READ'('<标识符>{,<标识符>}')'
<写语句> ::= WRITE'('<标识符>{,<标识符>}')'
<字母> ::= a|b|...|X|Y|Z
<数字> ::= 0|1|2|...|8|9