⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dotparse.ypp

📁 linux下的sourceinsight
💻 YPP
字号:
/* dot.y */%{#include <qdict.h>#include <qptrstack.h>#include <qlistview.h>#include "calltreedlg.h"#include "graphwidget.h"#include "treewidget.h"#include "encoder.h"extern FILE* yyin;int yylex();void yyinit(CallTreeDlg*, FILE*, Encoder*);void yyerror(const char*);static QMap<QString, QString> s_pMapAttr;static QStack<QListViewItem> s_pParentStack;static QListView* s_pTree;static GraphWidget* s_pGraph;static TreeWidget* s_pCallTree;static TreeWidget* s_pCallingTree;static Encoder* s_pEncoder;// Avoid compiler warnings#define YYENABLE_NLS 0#ifndef YYLTYPE_IS_TRIVIAL#define YYLTYPE_IS_TRIVIAL 0#endif%}%union {	QString* pText;}%token GRAPH DIGRAPH NODE NAME STRING NUMBER DIR_EDGE UNDIR_EDGE%token CALL_TREE CALLING_TREE%type <pText> NAME STRING NUMBER attr_val%start file%%file	: call_tree calling_tree graphgraph	: graph_type NAME '{' graph_desc_list '}' { delete $2; }	;graph_type	: GRAPH	| DIGRAPH	;graph_desc_list	:	| graph_desc_entry graph_desc_list	;graph_desc_entry	: def_node_attr	| graph_attr	| node_record	| edge_record 	;	def_node_attr	: NODE attributes ';'	;	graph_attr	: GRAPH attributes ';'		{			if (s_pMapAttr.find("kscope_zoom") != s_pMapAttr.end())				s_pGraph->setZoom(s_pMapAttr["kscope_zoom"].toDouble());		}	;	node_record	: NAME attributes ';'		{			s_pGraph->addNode(*$1);			delete $1;			s_pMapAttr.clear();		}	;	edge_record	: NAME edge_type NAME attributes ';'		{			GraphWidget::CallData cd;						cd.m_sCaller = *$1;			cd.m_sCallee = *$3;			cd.m_sFile = s_pMapAttr["kscope_file"];			cd.m_sLine = s_pMapAttr["kscope_line"];			cd.m_sText = s_pEncoder->decode(s_pMapAttr["kscope_text"]);			s_pGraph->addCall(cd);						delete $1;			delete $3;			s_pMapAttr.clear();		}	;	edge_type	: DIR_EDGE	| UNDIR_EDGE	;	attributes	: 	| '[' attr_list ']'	;	attr_list	:	| non_empty_attr_list	;	non_empty_attr_list	: attr	| attr ',' attr_list	;	attr	: NAME '=' attr_val		{			s_pMapAttr.insert(*$1, *$3);			delete $1;			delete $3;		}	;	attr_val	: NAME	| STRING	| NUMBER	;	call_tree	: call_tree_prepare '{' root_node '}'	;	call_tree_prepare	: CALL_TREE { s_pTree = s_pCallTree; }	;	calling_tree	: calling_tree_prepare '{' root_node '}'	;	calling_tree_prepare	: CALLING_TREE { s_pTree = s_pCallingTree; }	;root_node	: root_tree_node '{' child_list '}'		{			QListViewItem* pItem;						pItem = s_pParentStack.pop();			if (pItem->firstChild() != NULL)				pItem->setOpen(true);		}	;root_tree_node	: NAME		{			QListViewItem* pItem;						pItem = new QListViewItem(s_pTree, *$1);			s_pParentStack.push(pItem);			delete $1;		}	;	child_list	:	| child_node child_list	;	child_node	: tree_node tree_attributes '{' child_list '}'		{			QListViewItem* pItem;						pItem = s_pParentStack.pop();			if (pItem->firstChild() != NULL)				pItem->setOpen(true);		}	;tree_node	: NAME		{			QListViewItem* pItem;						pItem = new QListViewItem(s_pParentStack.top(), *$1);			s_pParentStack.push(pItem);			delete $1;		}	;tree_attributes	: attributes		{			QListViewItem* pItem;						pItem = s_pParentStack.top();			pItem->setText(1, s_pMapAttr["kscope_file"]);			pItem->setText(2, s_pMapAttr["kscope_line"]);			pItem->setText(3, s_pEncoder->decode(s_pMapAttr["kscope_text"]));		}	;%%void yyinit(CallTreeDlg* pDlg, FILE* pFile, Encoder* pEnc){	yyin = pFile;	s_pCallTree = pDlg->m_pCalledWidget;	s_pCallingTree = pDlg->m_pCallingWidget;	s_pGraph = pDlg->m_pGraphWidget;	s_pEncoder = pEnc;}void yyerror(const char* szError){	fprintf(stderr, "%s\n", szError);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -