我目前正在开发一种执行模式匹配的静态分析工具.我正在使用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中的符号表相关推荐

  1. oracle删除表空间中的表,ORACLE删除表空间中的所有表

    ORACLE删除表空间中的所有表,如果是非sysdbA连接用如下sql语句 declare vsql varchar2(200); cursor c1 is select 'drop table '| ...

  2. c语言全局变量符号,C语言中的 @ 符号是什么意思?

    标签:assign   inter   res   ted   访问内存   变量   出现   read_only   his Global Variable Address Modifier (@ ...

  3. c语言中英文字母的符号,C语言中的符号(国外英文资料).doc

    C语言中的符号(国外英文资料) C语言中的符号(国外英文资料) The symbol in C The operator's type C operator can be divided into t ...

  4. python表示整除的符号_c语言中整除符号怎么表示?_后端开发

    c语言fun函数有什么例题?_后端开发 c语言fun函数例题有:1.fun函数表示计算x的y次幂,代码为[for(int i=1;i<=y;i++)result*=x]:2.fun函数交换两个指 ...

  5. c语言坐标打符号,c语言中特殊符号

    c语言中特殊符号: 教你用输入法打出任意特殊符号,缺失:c语言中3248/9 最近老有人问我这个符号怎么打,那个符号怎么打. 我每次回答的都是,你要打的是特殊符号,这种特殊符号不能用输入法打出来,需要 ...

  6. matlab中字母重音符号,英语音标中的符号

    英语音标中的符号: 音标有多少个:英语48个音标及书写格式,缺失:英语音标中的符号7531/6 以下是的一些我们精选的音标有多少个:英语48个音标及书写格式 英语音标总共48个.其中元音20个,辅音2 ...

  7. matlab特殊符号代替,matlab中特殊符号

    matlab中特殊符号: 教你用输入法打出任意特殊符号,缺失:matlab中3248/9 最近老有人问我这个符号怎么打,那个符号怎么打. 我每次回答的都是,你要打的是特殊符号,这种特殊符号不能用输入法 ...

  8. php oracle 锁表,CSS_ORACLE 中关于锁表的问题,ORACLE里锁有以下几种模式:- phpStudy...

    ORACLE 中关于锁表的问题 ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share ...

  9. ios mysql 创建不同的用户表_iOS中数据库-创建表-增删改查数据-基础语法

    什么是SQL:结构化查询语言.create创建表drop删除表,delete是删除表中的数据 SQL语句不区分大小写,每条语句必须以分号结束,数据库中不可以使用关键字用为表名(sql常用关键字  se ...

  10. 编辑状态打开mysql表,Excel2016中数据透视表的编辑操作方法

    在Excel2016中建立初始的数据透视表后,可以对数据透视表进行一系列的编辑操作(如添加或删除字段.改变字段的显示顺序.更改统计字段的算法以及数据更新等),以达到不同的统计目的. 一.查看各门店数量 ...

最新文章

  1. c语言数据库线程池,C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
  2. 四十四、Mysql的命令和PyMysql
  3. java 二进制 定义_在Java中,我可以用二进制格式定义一个整数常量吗?
  4. python编写爬虫代码_python编写简单爬虫资料汇总
  5. leetcode题库:4.两个排序数组的中位数
  6. Django contenttypes组件
  7. [CS] 发起Conference Call
  8. project软件_Project软件操作篇——第三篇 优化计划
  9. linux命令mysql启动,linux下启动mysql的命令
  10. solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
  11. Android developer 阅读笔记--应用资源概览
  12. 服务器使用CDN加速的优劣势分析
  13. 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
  14. 【成像】【4】产生连续波Terahertz辐射
  15. ROS2探索(五)intra-process的内部原理
  16. 山东建筑大学计算机学院孙倩,山东建筑大学毕业设计答辩.pdf
  17. php对接linepay支付
  18. 饮用水中的氟化物超标怎么去除、除氟工艺介绍
  19. 补码和真值的对应关系
  20. 不要抱怨AI创业机会太少,看谷歌AIY的开发者是怎么说的

热门文章

  1. arouter跨module传递消息_利用ARouter实现组件间通信,解决子模块调用主模块问题...
  2. fillna函数_听说这些pandas函数,是数据科学家和软件工程师的最爱
  3. 电子工程就业前景真的不如计算机吗?
  4. 他复读才考上三本,如今让华为开出201万年薪(其实还拒绝了360万offer)
  5. defunct 进程占用端口_UAV心跳机制与容器、进程数据采集
  6. 逻辑回归模型 python_机器学习-逻辑回归分析(Python)
  7. linux mysql定时增量备份_Mysql 日常备份和增量备份脚本(Linux)
  8. 打印管理 php,window_强化Windows Server 2008下的打印管理,  打印管理从来都是Windows Se - phpStudy...
  9. mybatis 一对多_Mybatis 强大的结果集映射器resultMap
  10. 数字电子技术基础第三版杨志忠_阎石数字电子技术基础第6版笔记和课后习题详解...