我们有一个编译器的作业.我们已经进行了词法和语法分析,但我们仍然坚持生成中间代码.我们意识到我们必须实现一个符号表,以便进行中间代码生成,我们不知道,如何做以及它包含什么.
鉴于下面的代码,符号表应包含什么?(代码用教育语言编写,如下所述)
另外我们如何在符号表中实现范围?
Run Code Online (Sandbox Code Playgroud)<PROGRAM> ::= PROGRAM ID <BLOCK> ENDPROGRAM <BLOCK> ::= {<DECLARATIONS> <SUBPROGRAMS> <SEQUENCE>} <DECLARATIONS> ::= ? | DECLARE <VARLIST> ENDDECLARE <VARLIST> ::= ? | ID ( , ID )* <SUBPROGRAMS> ::= ( <PROCORFUNC> ) * <PROCORFUNC> ::= PROCEDURE ID <PROCORFUNCBODY> ENDPROCEDURE | FUNCTION ID <PROCORFUNCBODY> ENDFUNCTION <PROCORFUNCBODY> ::= <FORMALPARS> <BLOCK> <FORMALPARS> ::= ? | ( <FORMALPARLIST> ) <FORMALPARLIST> ::= <FORMALPARITEM> ( , <FORMALPARITEM> )* <FORMALPARITEM> ::= IN ID | INOUT ID <SEQUENCE> ::= <STATEMENT> ( ; <STATEMENT> )* <STATEMENT> …