Lex的小笔记
6v吧
全部回复
仅看楼主
level 10
虽然还没想好发什么内容……先贴出来好了,搞到哪贴到哪~
一晚上突击的Lex,感觉还挺有成就感
2012年03月29日 15点03分 1
level 14
[睡觉]
2012年03月29日 15点03分 2
level 10
在windows下编译lex文件的时候本来挺头大的,cygwin表示不会用,下了一个Parser Generator,结果配环境麻烦不说,配好了之后还生成不了程序,总是报错- - 后来找了个别人自己整理的含有最少文件的Lex与Yacc环境,用起来感觉颇好用。
地址么……在CSDN下载的,随便点开一个下载的页面,把最后的数字改成 283175 应该就Ok了。
一个 *.l 就生成一个 lex.yy.c,然后我是直接用Code::Blocks编译的。非常方便。
有时候在CB里编译的时候会报一个关于yywrap的错误,只要找个地方加上一句
#define yywrap() 1
就行了。
程序里面如果使用了yyin的话好像就会牵涉到这个yywrap。很莫名奇妙的一东西,设成恒为1就OK了,真是个没有存在感的函数。
2012年03月29日 15点03分 3
level 10
希望两年后你学编译原理的时候这帖子还能帮上点忙- -
2012年03月29日 15点03分 4
level 14
[啊!]编译原理...跪了
2012年03月29日 15点03分 5
level 10
虽然号称是很难的课,但学起来还是挺带感的……
密码学也是,学之前号称是很难的课,学之后才知道不过是号称而已。
大后天要做课程报告,所以晚上在突击Lex。网上的教程之类的也不少,我在这只发我自己纠结过并克服了的地方~
2012年03月29日 15点03分 6
level 10
[^\t\n]+ {nword++; nchar+=yyleng;}
这么一句话捣鼓了好久。想实现统计单词数和字母数的功能,但一开始单词数总是统计不对。纠结了好久好久才发现,我那个中括号里面少了个空格……改成 [^\t\n ]+ 这样就行了。
真不知道怎么吐槽我这智商了- =
一会再研究怎么把好几个功能整合到一起。

2012年03月30日 02点03分 7
level 10
实现了一个统计文本当中的汉字个数的程序。
结果发现对于没有匹配上的内容(非中文)会原样输出,不好。要把非中文的匹配也写出来然后后面动作为空,才正常。
2012年03月30日 14点03分 8
level 10
原来中文识别是用 [\x80-\xff][\x80-\xff] 这个表达式……
如果只输一个[\x80-\xff] 的话就只会匹配半个字。
不过不知道在别的编码方式是啥样╮(╯-╰)╭
2012年03月30日 14点03分 9
level 10
终于把统计单词行数的功能和给每一行标号的功能整合起来了,下一步把汉字和英文给区分开……略充实~
2012年03月30日 15点03分 10
level 10
一晚上时间把三段代码整合到一起了……
果然是有点意思~ 要考虑的情况挺多。难怪说正则表达式的表达能力不行
2012年03月30日 15点03分 11
level 14
[汗]
2012年03月31日 06点03分 12
level 10
原来在lex里面写注释的话要写打个空格然后才能/**/
不然会把 /* 当做模式来处理,囧- =
2012年03月31日 08点03分 13
level 10
2012年03月31日 09点03分 14
level 10
原来是我天真了,有个Bug其实……
不过现在改正了哇哈哈~~~不过代码也变得更纠结了点,多了个变量多了个函数多了个判断……惨- -
2012年03月31日 15点03分 15
1