佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 907|回复: 4

Lexer/parsing/tokenize

[复制链接]
发表于 5-5-2006 11:19 AM | 显示全部楼层 |阅读模式
[size=2]那位朋友有这方面的资料、代码?

小章鱼尝试编一个代码分析的程式,程式的功能就是检查代码的结构是否正确。
比方:
if(true){if(false){}} // 是正确的
if(ture){if(false){} // 是错的

所以需要这方面的运用。

谢谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 5-5-2006 11:39 AM | 显示全部楼层
在学院里, 曾经做过类似简单的, 你可以考虑用 stack 的 FILO 概念来做.
例如说:

if (true) { do_something(); }

如果把全部 string 放进 stack 里, 那就是类似以下:
0: if
1: (
2: true
3: )
4: {
5: do_something
6: (
7: )
8: ;
9: }

根据 FILO 的概念, 一个一个 pop 出来, 当你 pop 了一个 "{", 你就必须在那一行, 一定要找到另一个 "}", 否则不能算完成.
回复

使用道具 举报

 楼主| 发表于 5-5-2006 12:40 PM | 显示全部楼层
谢谢 goatstudio 大大,
不过这种方式看起来似乎很占处理时间
应该无法用于实时处理,对吧?

除了这个,还有其它的法子么?

还有
像 VS.NET 酱的 realtime cross files validate 是怎样实现的呢?
给每个 namespace/class/members 建立一个制表?
回复

使用道具 举报

发表于 5-5-2006 04:34 PM | 显示全部楼层
可用 flex/lex (lexical analyzer)与 bison/yacc (parser code generator) 自动生成parser源代码, 只需提供 相关 token 的资讯 和 Context Free Grammer, 就能自动generate parser 源代码 (C) 相当方便.

http://dinosaur.compilertools.net/
http://www.gnu.org/software/bison/
http://epaperpress.com/lexandyacc/

example:
http://www.lysator.liu.se/c/ANSI-C-grammar-l.html  <--- C lex 语法
http://www.lysator.liu.se/c/ANSI-C-grammar-y.html  <--- C yacc 语法
回复

使用道具 举报

 楼主| 发表于 6-5-2006 08:52 AM | 显示全部楼层
bontakun 小章鱼的 e 文不好,编程基础也不好(不会 C/C++),看得似懂非懂。
不过应该就是小章鱼要的咚咚。

谢谢你提供的资讯。

不过小章鱼想要的是自己实践类似的功能,而不是采用其它的引擎。
bontakun 能不能为小章鱼解一解你所说的“自动生成parser源代码”,是什么意思?
其所自动生成 parser 的源代码需要用到它的 library 吗?
在运用上又是如何?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 10-3-2025 06:01 AM , Processed in 0.664687 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表