• 大小: 4.65MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-28
  • 语言: C/C++
  • 标签: 编译原理  XD  

资源简介

简单函数绘图语言的解释器,某电编译原理大作业,此代码测试环境为vc6,亲测完美运行。

资源截图

代码片段和文件信息

// ----------------------------- grammer.cpp ---------------------------------
// 语法分析器类的定义

#include “grammer.h“

// ------------------------ 通过词法分析器接口get_token获取一个记号-------
void grammer_class::fetch_token()
{
token = lexical.get_token () ;
if (token.type == ERRTOKEN) syntax_error(1);
}

// ------------------------ 匹配记号---------------------------
void grammer_class::match_token (enum token_type the_token) 
{
if (token.type != the_token) syntax_error(2);
fetch_token();
}

// ------------------------ 语法错误处理--------------------------
void grammer_class::syntax_error (int case_of) 
{
switch(case_of)
{ case 1: error_msg (lexical.line_no“ 非法记号 “ token.lexeme) ;
break;
case 2: error_msg (lexical.line_no token.lexeme “ 不是预期记号“) ;
break;
}
}

// ------------------------ 打印错误信息---------------
void grammer_class::error_msg(int line char *descrip char *string)
{
cout << “Line No “ << line << “: “ << descrip << string << endl;
lexical.close_lexical();
exit(1);
}

// ------------------------ 先序遍历并打印表达式的语法树----------
void grammer_class::print_syntax_tree(tree_node_ptr root int indent)
{
int temp;

for (temp=1; temp<=indent; temp++) 
cout << “ “; // 缩进
switch(root->op_code) // 打印根节点
{ case PLUS:      cout << “+“ << endl; break;
case MINUS:     cout << “-“ << endl; break;
case MUL:       cout << “*“ << endl; break;
case DIV:       cout << “/“ << endl; break;
case POWER:     cout << “**“ << endl; break;
case FUNC:      cout << root->content.tag_func.math_func_ptr << endl; break;
case CONST_ID:  cout <content.tag_const << endl; break;
case T:         cout << “T“ << endl; break;
default:        cout << “非法的树节点!“ << endl; exit(0);
}
if(root->op_code == CONST_ID || root->op_code == T) 
return; // 叶子节点返回
if(root->op_code == FUNC) // 递归打印一个孩子的节点
print_syntax_tree(root->content.tag_func.childindent+1);
else // 递归打印两个孩子的节点
{
print_syntax_tree(root->content.tag_op.left  indent+1);
print_syntax_tree(root->content.tag_op.right indent+1);
}
}

// ------------------------ 绘图语言解释器入口(与主程序的外部接口)-----------
void grammer_class::grammer(char * file_name) 
{
enter(“grammer“);
if(!(lexical.init_lexical(file_name))) // 初始化词法分析器
{
cout << “打开文件错误 !“ << endl;
return;
}
fetch_token(); // 获取第一个记号
program(); // 递归下降分析
lexical.close_lexical(); // 关闭词法分析器
back(“grammer“);
return;
}

// ------------------------ program 的递归子程序---------------------
void grammer_class::program ()
{
enter(“program“);
while (token.type != NONTOKEN)
{ statement();
match_token(SEMICO) ;
}
back(“program“);
}

// ------------------------ statement 的递归子程序---------------------
void grammer_class::statement()
{
enter(“statement“);
switch (token.type)
{ case ORIGIN : origin_statement(); break;
case SCALE  : scale_statement(); break;
case ROT    : rot_statement(); break;
cas

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-07 15:53  Gramma\Debug\
     文件      589915  2018-12-07 15:53  Gramma\Debug\Gramma.exe
     文件      843108  2018-12-07 15:53  Gramma\Debug\Gramma.ilk
     文件     2018004  2018-12-07 10:01  Gramma\Debug\Gramma.pch
     文件     1377280  2018-12-07 15:53  Gramma\Debug\Gramma.pdb
     文件      186231  2018-12-07 10:01  Gramma\Debug\grammer.obj
     文件       20679  2018-12-07 15:53  Gramma\Debug\grammermain.obj
     文件       23657  2018-12-07 10:01  Gramma\Debug\lexical.obj
     文件      186026  2018-11-22 22:18  Gramma\Debug\parser.obj
     文件       20900  2018-11-29 21:41  Gramma\Debug\parsermain.obj
     文件       23579  2018-11-22 22:18  Gramma\Debug\scanner.obj
     文件      107520  2018-12-07 16:03  Gramma\Debug\vc60.idb
     文件      110592  2018-12-07 15:53  Gramma\Debug\vc60.pdb
     文件        4232  2018-12-02 21:55  Gramma\Gramma.dsp
     文件         520  2018-11-22 22:09  Gramma\Gramma.dsw
     文件       66560  2018-12-07 16:36  Gramma\Gramma.ncb
     文件       49664  2018-12-07 16:36  Gramma\Gramma.opt
     文件        1362  2018-12-07 15:53  Gramma\Gramma.plg
     文件       10106  2018-12-07 10:01  Gramma\grammer.cpp
     文件        2476  2018-12-07 10:01  Gramma\grammer.h
     文件         248  2018-12-07 11:14  Gramma\grammermain.cpp
     文件        4358  2018-12-07 10:01  Gramma\lexical.cpp
     文件        2571  2018-12-07 10:01  Gramma\lexical.h
     文件         191  2018-11-22 17:20  Gramma\test.txt
     文件         329  2018-11-22 21:58  Gramma\test1.txt
     文件         254  2018-11-29 21:24  Gramma\test2.txt
     文件         162  2018-12-07 09:33  Gramma\test6.txt
     目录           0  2018-12-07 09:31  Lexical\Debug\
     文件      303197  2018-12-07 09:31  Lexical\Debug\Lexical.exe
     文件      511544  2018-12-07 09:31  Lexical\Debug\Lexical.ilk
     文件       23539  2018-12-06 17:13  Lexical\Debug\lexical.obj
............此处省略50个文件信息

评论

共有 条评论