syntax.h
来自「现代编译原理C语言实现中的第二章的编译器实现。并在书中的基础上有所改变。包括词法」· C头文件 代码 · 共 96 行
H
96 行
#pragma once
#include "common.h"
#include "Lex.h"
#include "Semantic.h"
class Syntax
{
public:
Syntax(void);
~Syntax(void);
};
/*
<program> -> begin <statement list> end
<statementlist> -> <statement { <statement> }
<statement> -> <ID> := <expression>;
<statement> -> <read( <id list> );
<statement> -> <write>( <expr list> );
<id list> -> ID {, ID}
<expr list> -> <expression> {, <expression>}
<expression> -> <primary> { <add op> <primary> }
<primary> -> <expression>
<primary> -> ID
<primary> -> INTLITERAL
<primary> -> PLUSOP
<primary> -> MINUSOP
<add op> -> PLUSOP
<add op> -> MINUSOP
<system goal> -> <program> SCANEOF
带语义处理的表示: #xxxx表示对应的处理函数
<program> -> #start begin <statement list> end
<statementlist> -> <statement { <statement> }
<statement> -> <ident> := <expression> #assign ;
<statement> -> read ( <id list> );
<statement> -> write ( <expr list> );
<id list> -> <ident> #read_id {, <ident> #read_id }
<expr list> -> <expression> #write_expr {, <expression> #write_expr }
<expression> -> <primary> { <add op> <primary> #gen_infix }
<primary> -> ( <expression> )
<primary> -> <ident>
<primary> -> INTLITERAL #process_literal
<add op> -> PLUSOP #process_op
<add op> -> MINUSOP #process_op
<ident> -> ID #process_id
<system goal> -> <program> SCANEOF #finish
进行语法扩展
<system goal> -> <program> SCANEOF #finish
<program> -> #start <function> {, <function> }
<function> -> function <fname> ( <param list> ) begin <statement list> end
<function> -> function <fname> ( ) begin <statement list> end
<statementlist> -> <statement> { <statement> }
<statement> -> <ident> := <expression> #assign ;
<statement> -> read( <read list> );
<statement> -> write ( <write list> );
<statement> -> <ident> ( <argument list> ) #process_func_call;
<statement> -> <ident> ( ) #process_func_call;
<param list> -> <ident> #process_param {, <ident> #process_param }
<argument list> -> <ident> #process_argu {, <ident> #process_argu }
<read list> -> <ident> #read_id {, <ident> #read_id }
<write list> -> <expression> #write_expr {, <expression> #write_expr }
<expression> -> <mul expr> { <add op> <mul expr> #gen_infix }
<mul expr> -> <primary> { <mul op> <primary> }
<primary> -> ( <expression> )
<primary> -> <ident>
<primary> -> INTLITERAL #process_literal
<add op> -> PLUSOP #process_op
<add op> -> MINUSOP #process_op
<mul op> -> MULOP #process_op
<mul op> -> DIVOP #process_op
<ident> -> ID #process_id
<fname> -> ID #gen_func_name
*/
void system_goal (void);
void program (void);
void function (void);// new added
void statement_list (void);
void statement (void);
void param_list (void);// new added
void argument_list (void);// new added
void read_list (void);// id_list
void write_list (void);// expr_list
void expression (expr_rec *);
void mul_expr (expr_rec *);// new added
void primary (expr_rec *);
void add_op (op_rec *);
void mul_op (op_rec *);
void ident (expr_rec *);
void fname (expr_rec *);// new added
token next_token();
void match(token);
void syntax_error(token);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?