由买买提看人间百态

topics

全部话题 - 话题: yacc
首页 上页 1 2 3 4 (共4页)
O*******d
发帖数: 20343
1
来自主题: Programming版 - lex/yacc如何reset buffer?
Used 10 years ago. Forget most of it.
p***o
发帖数: 1252
2
来自主题: Programming版 - lex/yacc如何reset buffer?
And you always find the version you have cannot compile
the files others wrote ;)
t****t
发帖数: 6806
3
来自主题: Programming版 - lex/yacc如何reset buffer?
you can write a helper function with yy_flush_buffer at the end of .l file.
.y file will include a prototype of it and call it.
the general rule is put all lexical operation into .l file, and all syntax o
peration into .y file. they may call each other.
flex/bison is ok, not easy to use, but as a fast parser prototype tool, it i
s ok. you can add/change syntax easily.

yylex
t****t
发帖数: 6806
4
来自主题: Programming版 - C++的exception大家常用吗?
你觉得别扭可能是因为你没有按照C++的风格来写程序. 如果你把C++作为一个C
superset来用, 那exception肯定不好用. 但是按照C++的风格, 把错误和正常返回的
path分开是很方便的. 随便举几个例子:
* 你可以在constructor里扔出异常. 部分分配的对象会被自动释放. error code不行.
* 你可以在overloaded operator里扔出异常. error code不行. 推广: 在你不能改变
function signature的时候, 异常很方便.
* 你不需要在每个叶子调用检查返回值. 可以在调用树较高的地方, 或者说方便报告出
错的地方, 接住异常并报告. 更重要的是, 你也不会忘记检查返回值. 比如说你不需要
在每个new检查是否返回0(事实上正常的new并不返回0, 除非你使用nothrow调用).
你需要做的:
* 除非你准备出错后立刻退出, 否则所有动态分配的内存和其它资源(file handle,
socket, sync lock, etc)必需能够自动释放. 你需要使用容器(STL container),
smart... 阅读全帖
p***o
发帖数: 1252
5
1 Install mingw/gcc/msys
2 Extract the source file
3 Read README, INSTALL or whatever document on how to build
4 Try to build it
Most likely you can finish the first 3 steps in 30mins and the fourth step
fails. Then you need to figure out why it fails: lack of tools, e.g. yacc;
incompatible build script; or the worst, system calls not available on
windows. It requires you to know programming on both platforms well before
you can get thing right.
Anyway, I won't do it unless paid directly or indi... 阅读全帖
r*********r
发帖数: 3195
6
来自主题: Programming版 - 如何自学python
呵呵,很多年前上课用 python 做了一个pascal编译器,轻松搞定。
基本上不怎么出错,而偶要debug一下也很容易。
有人用 lex/yacc, 那个折腾。。。
r*********r
发帖数: 3195
7
来自主题: Programming版 - 如何自学python
呵呵,很多年前上课用 python 做了一个pascal编译器,轻松搞定。
基本上不怎么出错,而偶要debug一下也很容易。
有人用 lex/yacc, 那个折腾。。。
t****t
发帖数: 6806
8
来自主题: Programming版 - 数八皇后解法数目:python只要9行
啥叫实在的东西...我是传统型码工, 不大用/不会用生成器, 可以算生成器的是lex/
yacc, 不过那个生成的代码我没算. 这个项目三部分: 一个运行引擎+脚本解释器(有完
整语法/语义), 13K行, 一个公用库(主要是滤波器), 14K行, 一堆分离的模块, 20K左
右. 第一部分算是核心. 对了这个是C++的, 会比C简洁很多.
t****t
发帖数: 6806
9
来自主题: Programming版 - Re: L 电面 (转载)
不是practice more或者come up with different solution, 而是这种经典问题是有成
熟解的, 并且例子随处可见. 比如说编译原理课, 比如说yacc parser, 比如说x87的寄
存器模型, 都是shift/reduce的例子. 不能立刻就得到出题人想要的解, 说明你经验不
够(这些都没接触过), 如此而已.

stack
D***n
发帖数: 6804
10
来自主题: Programming版 - 程序员怎么定义 ’强‘与’弱'?
亲身经历这个看法不对。
我现在因为工作需求,需要懂汇编,体系结构,会用Lex/Yacc写简单的语言,使用编译
器实现静态分析, IDE,memory, thread & concurrency,还能根据需要实现各种算法。
但是这个方面只是程序员很小部分的技能。比如我面试第二轮经常过不去。。。一弄面
试算法就栽。

compiler
c****e
发帖数: 1453
11
来自主题: Programming版 - 到底动态语言的好处是啥?
1. no schema/less schema -> faster iteration, less code.
People spend too much time on designing, versioning and coding on schemas.
2. FP features make coding more directly on data, rather than the OOP
paradigm, where overhead is more significant.
3. Seamless integration with scripting makes system more versatile and
customizable. Not everyone is a guru and can write a parser for DSL(domain
specific language). I have met very few people that is capable to play with
Lex&YACC, Bison or ANTLR, even... 阅读全帖
n*****t
发帖数: 22014
12
来自主题: Programming版 - 简易计算器优先计算级别怎么算?
Google yacc/lex,很好玩
n*****t
发帖数: 22014
13
来自主题: Programming版 - 最高大上的 atoi
是用 yacc/lex 写的,还有人记得这对活宝么?
e***e
发帖数: 3872
14
来自主题: Programming版 - 最高大上的 atoi
葵花宝典上这类问题都用yacc/lex做:命令行解释器,customized的语言什么的,自己
写parser才活宝吧
t****t
发帖数: 6806
15
来自主题: Programming版 - 最高大上的 atoi
我还用yacc和lex呢.
x****u
发帖数: 44466
16
来自主题: Programming版 - 最高大上的 atoi
你的项目如果远比YACC复杂,那当然可以考虑自己做一个语法解析。
S*A
发帖数: 7142
17
来自主题: Programming版 - 最高大上的 atoi
用在 SQL 大概比 C 要好些,因为一般 SQL 要比 C
短很多然后语法也简单很多。这样大概报错的时候不
是特别精确问题也并不大。但是如果一旦你要对报错
有一定要求,YACC 就会很不爽。
运行效率上用 C 手写的更高些。编译 C 程序的话,
在 Lex 部分的花的 CPU 要比语法分析的多,因为那里
是循环最密集的地方。语法部分的程序的密集程度没有
Lex 部分高。
S*A
发帖数: 7142
18
来自主题: Programming版 - 最高大上的 atoi
对灵活性和扩展性要求高才不能用 YACC 呢。
你实验一下用 C 直接嵌套一段汇编的语法,不是把
汇编放在字符串里面就知道了。
那种简单的变量赋值用直接 C 写也很方便。

西。
d***a
发帖数: 13752
19
来自主题: Programming版 - 最高大上的 atoi
是这样。Yacc是LR型的,用bottom-up方式来解析,生成的代码不好理解。
S*A
发帖数: 7142
20
来自主题: Programming版 - 最高大上的 atoi
手写其实更容易维护。看看 gcc 转换的时候是如何说的,
YACC 把代码切成一小段一小段的,中间还有个
黑盒子的状态树,其实维护更加困难。C 其实不是
严格 LLK 语法的。
BTW 注意到手写后速度还轻微提高了没有?
http://gcc.gnu.org/wiki/New_C_Parser
Benefits:
Although timings showed a 1.5% speedup, the main benefits are
facilitating of future enhancements including: OpenMP pragma support; lexing
up front for C so reducing the number of different code paths; diagnostic
location improvements (and potentially other diagnostic improvements);
merging cc1/cc1obj into a single executable with runti... 阅读全帖
d***a
发帖数: 13752
21
可以考虑用yacc或antlr。后者现在更流行一些。
G***l
发帖数: 355
22
lz你的标题误导人了。你在标题里说文本分析,结果一堆回复perl/python的,那些做
文本处理是很好。但你这个不是文本的问题,因为你这不是单纯的文本,是有语义的。
你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用compiler
把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都能准确定
位到,这时候你把ast上所有变量定义后面加一个初始化,再把ast反过来写成source
code,就成了。
如果你的需求很简单,比如只是变量定义加上初始化,那用纯文本regular expression
处理就可以了,perl,python很适合,哪怕sed/awk都可以搞定。如果复杂的话就需要
parser了,你可以用antlr,yacc之类的,那些常见语言的grammar都有现成的,不过要
是你自己特定的语法的话,就要自己写lexer/parer了,用上面提到的parser
generator的工具也挺容易。
w***g
发帖数: 5958
23
来自主题: Programming版 - 竟然有人鼓吹自动生成代码的?
而且生成出来的代码还需要人看!简直就是本末倒置了。
人写代码是为了让机器执行任务,最好的设计自然是应该把人写的代码和机器产生的数
据分开。Linux下也有lex/yacc, gperf, rpcgen等自动生成代码的工具,但那写都只是
作为中间数据直接传入编译器的,不需要人看的,中间代码也不用存入版本管理软件。
有些情况下因为现在技术水平制约,偶尔用机器产生代码是可以提高生产力。但是把这
个看成先进技术是不对的。
我知道你IDE用得很爽。大部分人用IDE都用得很爽,你自己爽爽就可以了。又不是什么
了不起的本事,也值得拿出来吹。
p***o
发帖数: 1252
24
来自主题: Programming版 - 竟然有人鼓吹自动生成代码的?
别提lex/yacc,每次都有问题,不是flex/bison版本太新没法生成中间代码,
就是gcc版本太新没法编译中间代码。
D***n
发帖数: 6804
25
有几个基本的东西你要看:
Computer architecture 计算机体系结构(不用看太懂,知道计算机大概怎么工作的就
行了)
语言方面,重点要看这本书:
Compilers: Principles, Techniques, and Tools
配合这本书有:
Python的PLY ( Python的Lex/Yacc)
C语言,特别要实践一下如何用C语言实现OOP
这个书里面详细地实现了正则表达式,特别有用。
一旦你了解这些语言具体在机器那里是怎么实现的,很多东西就很通透了。然后你就会
发现Python/C/C++是个桌面/服务器很好的组合:)
e*******o
发帖数: 4654
26
【 以下文字转载自 biojailbreak 俱乐部 】
发信人: mdrosophila (ranger), 信区: biojailbreak
标 题: 总结,请给我转发programming版,我给封了
发信站: BBS 未名空间站 (Sun Dec 14 10:09:46 2014, 美东)
上次发帖,根据我的具体情况大家提了不少意见,对我以后的目标,有了更加清晰的认
识。对于已经工作的,给出的意见很感谢,对于正在努力的,就一起提高。以后希望能
一起搞点有意义的事。
准备选advanced bioinformatics , 已经学了bioinformatics,这样对于生物领域的
machine learning的算法基本上都完整了,然后系统的选一门专门讲普遍machine
learning和artificial intelligence 的课 (wdong).
数据库的话看来也得选一门(wdong)
对于C++,看了1/3primer c++后,发现具体的用法很多,很细。这是c++reference
book中没有讲的。nickmit 提到 码公的职责就是用简洁高效的代码写出... 阅读全帖
r*******3
发帖数: 24
27
编译器有那么难吗?我n年前花一周翻了本编译器的书大概了解了下原理,然后花了一
周学习yacc,lex,再花一周写了个编译器,可以编译一般的win32api窗口程序
我学数学的
b******y
发帖数: 9224
28
来自主题: Programming版 - rust现在很火

我喜欢pascal的begin, end这种语法,做compiler的时候很方便。我原先编写一个简单
的template engine的时候就碰到过这个问题, 比如说,如果是像c/java这样的,
for (...){
}
就不如搞成这样的:
for (...)
endfor
因为有了endfor,和for对应工整,写compiler的时候就很好写了。
当然,我的compiler知识也是自学的,没用过啥yacc, lex等,都是自己手动编写的
recursive descent parsing。
n*****t
发帖数: 22014
c*****t
发帖数: 1879
30
It is actually far simpler than what you think.
For example, using Java 1.8 stream api,
You basically
1. Create a Stream of rows (which are key/value pairs)
2. Create a Predicate which is based on the predicate to filter the stream.
3. Create a Consumer that does the projection.
And then just collect() the result. You can optionally do the sort()
(if there is an order by). Aggregation is just map / reduce of the
stream.
Other than join, basically any single table SQL operation can be easily
do... 阅读全帖
w**z
发帖数: 8232
p***o
发帖数: 1252
d*******r
发帖数: 3299
33
不错啊,这个居然也是java的
s******u
发帖数: 501
34
来自主题: Programming版 - 请教一个parser的问题
parsing有用了几十年的现成算法了,像从下到上的LR parsing或者从上到下的LL
parsing,所以算法那块就不用自己去研究了
接下来parsing的library也基本上到处都是,C的bison+yacc,c++的boost spirit,
java的antler,各个常用语言基本都有自己的parsing library
在其次,你这个题目已经有现成的EBNF给你了,用那些library无非就是把这个EBNF照
样写上去,或者改写成某个Domain spcific language,生成代码,自己再处理一下生
成的syntax tree就完事了
p****2
发帖数: 387
35
来自主题: Software版 - Static library linking using Bison
请教一个问题:请问用Bison/Yacc可以实现把Object Code加到源程序中。
譬如,Source1能引用object2.o中的函数.
h******a
发帖数: 198
36
play with linux , play with different shells, play
with various tools(awk,perl,sed,lex,yacc,gnuplot,vi,make
,gdb,gcc,RCS,gprof,expect,Tcl/Tk,...)
BTW, u should learn emacs first. I began to love
UNIX after I mastered 30% of emacs.
Then, you could begin to learn UNIX system programming
and hack around its kernel....(I am on the way too)
The strongest recommended Book:
Kernighan & Pike <>
If you are truly interested, you can visit the website to
hear the suggestion
T********r
发帖数: 6210
s*******2
发帖数: 499
38
谢谢。
可是我没有用到warning这个function.所以我就不明白了。
我是新手,实验室也没有人做这方面。还请多指教。多谢。
m*******n
发帖数: 3
39
来自主题: Anniversary版 - 十大ID
[ 1] gtpase 头上有天线的那个米饭 89029小时53分钟
[ 2] palm 棕榈叶) (现实点,不要再做梦了 76336小时25分钟
[ 3] kellyliu Go Irish! 48515小时31分钟
[ 4] jedimao 雨中漫步 43197小时40分钟
[ 5] besson yacc 38133小时20分钟
[ 6] hanzo 兴趣矿工 37542小时53分钟
[ 7] chester 东东 36580小时55分钟
[ 8] rodney 共振的板块 36108小时35分钟
[ 9] nhh Liebe
f*********g
发帖数: 632
40
来自主题: _FunctionalProgramming版 - SQL-like DSL parser
哪种语言的编译器有用函数式语言实现的?
俺只用过lex,yacc等等工具链实现语言编译器。
咣当。
首页 上页 1 2 3 4 (共4页)