linux c 符号表,C中的符号表
我目前正在开发一种执行模式匹配的静态分析工具.我正在使用Flex生成词法分析器,我编写了代码来管理符号表.我对C不太熟悉,所以我决定将符号表实现为线性链表.
#include
#include
#include
struct symtab {
int id;
char *name;
int type;
struct symtab *next;
};
enum types {
KEYWORD = 1,
CONSTANT,
IDENTIFIER,
OPERATOR,
DELIMITER,
WHITESPACE
};
struct symtab *last_entry(struct symtab *start)
{
struct symtab *p;
p = start;
while(p -> next != NULL) {
p = p -> next;
}
return p;
}
void add_entry(char* name, int type, struct symtab *start)
{
struct symtab *new;
new = last_entry(start);
int id;
if(new == start) {
new = start;
id = 0;
}
else {
new = malloc(sizeof(struct symtab));
id = last_entry(start) -> id;
last_entry(start) -> next = new;
}
new -> id = id + 1;
new -> name = name;
new -> type = type;
new -> next = NULL;
}
struct symtab *find_entry(char* name, struct symtab *start)
{
struct symtab *p;
p = start;
while(p -> next != NULL) {
if(strcmp(p -> name, name) == 0) {
return p;
}
}
}
但是,当我使用add_entry()添加符号,然后尝试使用find_entry()查找它们时,find_entry()返回null.有人可以帮忙吗?
解决方法:
看起来您试图将列表表示为标题对象(开始),然后是列表的实际元素.这是一个好主意,因为它简化了空列表的情况,但你没有得到正确的实现.
添加时,您需要删除为last_entry启动时获得的特殊情况代码.起始节点永远不会包含符号数据.
查找时,您必须确保跳过头(开始),因为它不包含符号数据.查找代码中的第二个错误是当p-> next为NULL时停止搜索(这意味着你永远不能返回列表中的最后一个元素.)当p为NULL时你应该停止.
当然,您根本不应该使用链表:哈希表是更好的选择,因为它具有更好的性能和内存效率.
标签:c-3,linux,symbol-table
来源: https://codeday.me/bug/20190621/1254598.html
linux c 符号表,C中的符号表相关推荐
- oracle删除表空间中的表,ORACLE删除表空间中的所有表
ORACLE删除表空间中的所有表,如果是非sysdbA连接用如下sql语句 declare vsql varchar2(200); cursor c1 is select 'drop table '| ...
- c语言全局变量符号,C语言中的 @ 符号是什么意思?
标签:assign inter res ted 访问内存 变量 出现 read_only his Global Variable Address Modifier (@ ...
- c语言中英文字母的符号,C语言中的符号(国外英文资料).doc
C语言中的符号(国外英文资料) C语言中的符号(国外英文资料) The symbol in C The operator's type C operator can be divided into t ...
- python表示整除的符号_c语言中整除符号怎么表示?_后端开发
c语言fun函数有什么例题?_后端开发 c语言fun函数例题有:1.fun函数表示计算x的y次幂,代码为[for(int i=1;i<=y;i++)result*=x]:2.fun函数交换两个指 ...
- c语言坐标打符号,c语言中特殊符号
c语言中特殊符号: 教你用输入法打出任意特殊符号,缺失:c语言中3248/9 最近老有人问我这个符号怎么打,那个符号怎么打. 我每次回答的都是,你要打的是特殊符号,这种特殊符号不能用输入法打出来,需要 ...
- matlab中字母重音符号,英语音标中的符号
英语音标中的符号: 音标有多少个:英语48个音标及书写格式,缺失:英语音标中的符号7531/6 以下是的一些我们精选的音标有多少个:英语48个音标及书写格式 英语音标总共48个.其中元音20个,辅音2 ...
- matlab特殊符号代替,matlab中特殊符号
matlab中特殊符号: 教你用输入法打出任意特殊符号,缺失:matlab中3248/9 最近老有人问我这个符号怎么打,那个符号怎么打. 我每次回答的都是,你要打的是特殊符号,这种特殊符号不能用输入法 ...
- php oracle 锁表,CSS_ORACLE 中关于锁表的问题,ORACLE里锁有以下几种模式:- phpStudy...
ORACLE 中关于锁表的问题 ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share ...
- ios mysql 创建不同的用户表_iOS中数据库-创建表-增删改查数据-基础语法
什么是SQL:结构化查询语言.create创建表drop删除表,delete是删除表中的数据 SQL语句不区分大小写,每条语句必须以分号结束,数据库中不可以使用关键字用为表名(sql常用关键字 se ...
- 编辑状态打开mysql表,Excel2016中数据透视表的编辑操作方法
在Excel2016中建立初始的数据透视表后,可以对数据透视表进行一系列的编辑操作(如添加或删除字段.改变字段的显示顺序.更改统计字段的算法以及数据更新等),以达到不同的统计目的. 一.查看各门店数量 ...
最新文章
- c语言数据库线程池,C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
- 四十四、Mysql的命令和PyMysql
- java 二进制 定义_在Java中,我可以用二进制格式定义一个整数常量吗?
- python编写爬虫代码_python编写简单爬虫资料汇总
- leetcode题库:4.两个排序数组的中位数
- Django contenttypes组件
- [CS] 发起Conference Call
- project软件_Project软件操作篇——第三篇 优化计划
- linux命令mysql启动,linux下启动mysql的命令
- solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
- Android developer 阅读笔记--应用资源概览
- 服务器使用CDN加速的优劣势分析
- 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
- 【成像】【4】产生连续波Terahertz辐射
- ROS2探索(五)intra-process的内部原理
- 山东建筑大学计算机学院孙倩,山东建筑大学毕业设计答辩.pdf
- php对接linepay支付
- 饮用水中的氟化物超标怎么去除、除氟工艺介绍
- 补码和真值的对应关系
- 不要抱怨AI创业机会太少,看谷歌AIY的开发者是怎么说的
热门文章
- arouter跨module传递消息_利用ARouter实现组件间通信,解决子模块调用主模块问题...
- fillna函数_听说这些pandas函数,是数据科学家和软件工程师的最爱
- 电子工程就业前景真的不如计算机吗?
- 他复读才考上三本,如今让华为开出201万年薪(其实还拒绝了360万offer)
- defunct 进程占用端口_UAV心跳机制与容器、进程数据采集
- 逻辑回归模型 python_机器学习-逻辑回归分析(Python)
- linux mysql定时增量备份_Mysql 日常备份和增量备份脚本(Linux)
- 打印管理 php,window_强化Windows Server 2008下的打印管理, 打印管理从来都是Windows Se - phpStudy...
- mybatis 一对多_Mybatis 强大的结果集映射器resultMap
- 数字电子技术基础第三版杨志忠_阎石数字电子技术基础第6版笔记和课后习题详解...