发信人: yuchix()
整理人: fishy(2000-11-25 21:30:51), 站内信件
|
http://expert.csdn.net/Topic/27042.shtm
1 识别标记:
标记开始的形式是<XXXX ,即“<”字符紧接着一系列的英文字母或数字,中间不 可一有空白符,之后以空白符分隔;空白符不只是空格,可以是“\n\b\r\s”.. .
如果标记在一个注释内部、或在属性内就忽略掉。
2 识别属性
识别处标记的首部,之后出现属性,有两种情况:
1)单独的英文字母或数字序列,后面没有尾随“=”或“一系列空白符=”,可 是做一个属性,如checked属性。(后面的描述大多可以间隔空白符,不一一说明 了)
2)后面尾随“=”或“一系列空白符=”,则得到一个属性的名称,等号后面的 如果出现“"”
则降下一个“"”之间的内容当作属性(这里不支持c风格的转移序列,而是用HT ML转移序列。)。另一种情况,等号后面没有出现“"”,简单的把跟随的文字序 列作为属性值,直到发现空白符或>符号。
属性结束后发现>符号,则一个标记处理完毕
3。实际系统中,结束标签可以忽略,</XXXX 只要发现就搜索到下一个>,将中间 的字符忽略。
处理中需要使用堆栈,每识别完一个开始标签将其压栈,发现某一个标记的结束 标签后,在堆栈中不断弹出栈顶元素,每弹出一个元素此元素的作用域就结束了 ,直到弹出的元素是相应的开始标记为止。实际上结尾标记从来不进入堆栈,这 样便解决了标记不匹配的问题。
从实现的角度看,可以把超文本注释、属性的引号字符串,连续的非空白符文本 ,作为处理的最小单元,只可以出现在栈顶,当他们在栈顶时,压栈操作可以忽 略。这样就只需要一遍单向扫描。至一点对实际的浏览器是必须的,因为要在文 件完全下在完之前显示。
-- 網易彩色簽名檔生成器
令你的簽名更出色
http://go.163.com/~yuchix/BBSNNint.zip
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.42.22]
|
|