-
Lesson 1 - 最简单的C程序
-
Lesson 2 - 打印输出
-
Lesson 3 - 循环打印
-
Lesson 4 - 判断奇偶
-
Lesson 5 - 从1加到100求和
-
Lesson 6 - 乘法表
-
Lesson 7 - 求100以内的最大素数
-
Lesson 8 - 1到100有多少个9
-
Lesson 9 - 整型转字符串
-
Lesson 10 - 约瑟夫环
-
Lesson 11 - 求两个坐标点之间的距离
-
Lesson 12 - 判断机器存储是否小尾端
-
Lesson 13 - 对不起,你的车今天限行
-
Lesson 14 - 判断地图上某点是否有出路
-
Lesson 15 - 统计一个数二进制表示中1的个数
-
Lesson 16 - 字符串拷贝
-
Lesson 17 - 统计单词个数
-
Lesson 18 - 实现 printf
-
Lesson 19 - 命令解释器
-
Lesson 20 - 预处理器实现
-
Lesson 21 - 词法分析器实现
-
Lesson 22 - 猜数游戏
-
Lesson 23 - 五子棋
-
Lesson 24 - 超链接分析器
-
Lesson 25 - cp命令实现
-
Lesson 26 - ELF文件头分析器实现
-
Lesson 27 - 简单流处理器实现和正则表达式
-
Lesson 28 - 数学计算器实现
-
Lesson 29 - 数学计算器实现more命令实现
-
Lesson 30 - sort命令实现
-
Lesson 31 - ls -l命令实现
-
Lesson 32 - Bash项目
-
Lesson 33 - 动态数组实现
-
Lesson 34 - 约瑟夫环问题
-
Lesson 35 - 表达式求值问题
-
Lesson 36 - 广度优先解决迷宫问题
-
Lesson 37 - 词频统计器
-
Lesson 38 - 堆排序问题
-
Lesson 39 - 构造符号表
-
Lesson 40 - MyDictionary项目
-
Lesson 41 - BSearch 实现
-
Lesson 42 - QSort 实现
-
Lesson 43 - 深度优先解决迷宫问题
-
Lesson 44 - KMP 算法实现
-
Lesson 45 - 最长公共子序列(LCS)问题
-
Lesson 46 - Dijkstra 算法
-
Lesson 47 - Huffman Coding 算法
-
Lesson 48 - 地图导航项目
Lesson 21 Lexical analysis 词法分析器实现
#include <stdio.h>
#include "yy_nxt.c"
#include "yy_accept.c"
#define debug(fmt, args...) fprintf(stderr, fmt, ##args)
int main(void)
{
int state = 1;
char buf[64];
int i = 0;
while (1)
{
char c;
c = getchar();
if (c == EOF)
break;
buf[i++] = c;
debug("\tstate = %d, ", state);
state = yy_nxt[state][c];
debug("c = <%c>, new state = %d\n", c, state);
if (state < 0)
{
int act = 0;
state = -state;
act = yy_accept[state];
buf[i-1] = '\0';
// 1: \n 21: space
if (!(act == 1 || act == 21))
printf("Pattern %d found! <%s>\n", act, buf);
i = 0;
state = 1;
ungetc(c, stdin);
}
}
return 0;
}
copy
约减转换表格,原来二维的转换表to一维数组 base/default/check/next
http://www.codingboy.com/zlog/post/32.html
http://bbs.zixia.net/boardcon.php?bid=571&id=230&ftype=6
http://m20.googlecode.com/svn/trunk/cc/scanner.l
注释flex生成代码
http://old.blog.edu.cn/user1/14610/archives/2005/376568.shtml
input/output/puton 字符串匹配问题
http://www.cnblogs.com/zhanglanyun/archive/2012/02/16/2354686.html
http://bbs.csdn.net/topics/300130885?jumpMenu=2&page=2
语法知识点
- 二维数组
- 二维函数指针数组
- 状态机编程之“机制和策略的分离”
课堂讨论
- new_state 变量是否是必须的,如果去掉程序应该怎么改?
课后练习
- 请根据第一节课介绍的 BNF 范式,对于词法分析器处理的结果,进行语法归约,看看是否满足C语法要求。