(1)PL/0编译程序文本中给出关于某些语法单位开始符号集合的定义为: symset=set of symbol; (见PL/0文本类型说明部分) declbegsys, statbegsys, facbegsys:symset; declbegsys:=[constsym,varsym,procsym];(见PL/0文本主程序置初值部分) statbegsys:=[beginsym,callsym,ifsym,whilesym,readsym,writesym]; facbegsys:=[ident,number,lparen]; (2)后继符号集合fsys作为参数传递(见PL/0文本相应过程的说明部分) procedure test(s1,s2:symset; n:integer); procedure block(lev,tx:integer; fsys:symset); procedure statement(fsys:symset); procedure expression (fsys:symset); procedure term (fsys:symset); procedure factor (fsys:symset); (3)因子过程的处理片段(见PL/0文本的factor过程) ![]() (4)由于后继符号集合fsys作为参数传递,随着调用语法分析程序层次的深入后继符号集合逐步增加,但对调用同一个过程所需增加的后跟符与调用位置有关。例如: 在write语句和factor中调用expression(fsys);所增加的后继符号不完全相同。 · write语句的语法:<写语句> ∷= write(<exp>{,<exp>}); 处理在( )内调用expression时在fsys中应增加 rparen,comma。 expression([rparen,comma]+fsys); · factor的语法:<因子>∷=...|'(' exp ') 在处理( )内调用expression时在fsys中应增加rparen。 expression([rparen]+fsys); |