看板Programming
标 题Re: [问题] 有没有人用过Yacc
发信站KKCITY (Fri Feb 2 00:00:17 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.chu!Leo.mi.chu!zoonews.ee.nt
※ 引述《[email protected] (Victor)》之铭言:
> 於是我发现了Yacc & Lex这个东东
> 一个很有趣的东西,透过一些语法,来产生分析语法的程式
> 有人用过吗?
> 问题来了...,这样产生出来的程式效率如何?
不错,起码你在写小程式的时候不会感觉到很逊。
> 还有....,它正规表示法是产生C程式来达成
> 还是动态用C提供函式供呼叫?
不知道你要问啥?
Lex基本上是一个用来识别token的工具
你在lex script里面写好什麽东西是token, 什麽不是
lex最後就会输出一个scanner函数,这个函数可以在你的C语言程式里使用
吃进输入,输出token
yacc更深奥了,他是用来处理语法问题
比如说我看到token B在token A後面表示什麽意思
只有一个token A又是什麽意思
yacc产生的函数称为parser,要配合scanner来使用
但是要从网页中找连结,那用lex/yacc是杀鸡用牛刀,我劝你别用
用你底下提到的Boost regex,或者java 1.5就内建的regex,就够了
Lex/yacc的威力是可以从头做出一个高阶语言
你学compiler的时候自然会用到,如果贵校开课老师不偷懒的话
那时你自然可以了解并评估他的威力
但是用在HTML上,除非你要从头做browser,否则是浪费时间
> 虽然说Boost有提供正规表示法可以用,我一直都还没用过= ="
> 就像当初对STL有点疑问,那样的效能好吗?
> 用正规表示法分析出来的东西会比手写的快吗?
不用一下怎麽会知道?
我不知道你现在写的系统有多大,但是如果有轮子好用,就不要重新发明轮子
了。我看过你当初贴在本板给大家看的一些旧的成果,那令我很敬佩。所以我
猜,你现在问用这些别人写好的东西好不好,有可能是落入了那种coding老手
常常有的问题,不认为library 会比自己写的更好。其实现在程式的效率越来
越不受重视了。如果一个没受多少训练的新手可以使用这个那个API 很快堆出
来一个能用的程式,而老手殚精竭虑想出一个手工精制的版本,却要新手的三
倍时间,那很可能会沦落到没人理的下场。先写出来,如果真的很慢,那就再
改,又有何妨。有的时候perf根本不是major concern,需要求快的程式自然有
机会可以让你再花时间去改善它,不必第一次就做到最好。"Do right things
at first" 是搞管理的人讲的,我们都知道那是骗人的。
--
X-URL1: http://www.aviationnow.com/ ‧李登辉=格达费=外星人‧有厕
检举匪谍 人人有责 ⊙ 检举匪谍 安居乐业 人所
检举匪谍渗透破坏 人人安居乐业|肃清贪污经济犯罪 社会繁荣进步
破案奖金三百万|知情不报判徒刑
检举要件:请用真实姓名、地址,受理机关绝对保密
X-Disclaimer: 李登辉一定是外星人! Mk.22 Mod4 5/15/01 Mod3 6/9/98
--
┌─────◆KKCITY◆─────┐ ◢╱ 只要你
通过身份认证 ~ ◥█
│ bbs.kkcity.com.tw │ █▉─ 免经验、五人连署即开班系板 ◥
└──《From:218.160.89.246
》──┘ ◥╲ 赶快为班上设个
秘密基地吧!
◢
--