请问那位大哥有过开发HTML浏览器(读取网页标签的算法)的经验?100分送上

Putao 2000-08-27 09:11:00
小弟正在开发一简易网页浏览器,需要在程序中识别网页标签,
包括:标签名(如:FORM),
参数名(如:COLOR),
参数值(如:#FFFFFF),
标签结尾(如:〈/FORM〉,
最重要的还是标签名。请问用什么算法可以搞定?

请给出原理解释,有源码(Delphi)更好!
...全文
345 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Putao 2000-09-09
  • 打赏
  • 举报
回复
To deanjiang:
“空白符不只是空格,可以是“\n\b\r\s”...”
是什么意思,请指教。
Putao 2000-09-08
  • 打赏
  • 举报
回复
To deanjiang:
“空白符不只是空格,可以是“\n\b\r\s”...”
是什么意思,请指教。
deanjiang 2000-09-08
  • 打赏
  • 举报
回复
按照rfc文档做出来当然最好,不过IE与NS都不是这样做的,因为显示中的HTML大都不完全符合语法,最常见的就是该匹配的标记没有成对出现。你的要求并不高,所以就好实现了,不用看什么变异原理。下面是我的思路
1 识别标记:
标记开始的形式是<XXXX ,即“<”字符紧接着一系列的英文字母或数字,中间不可一有空白符,之后以空白符分隔;空白符不只是空格,可以是“\n\b\r\s”...
如果标记在一个注释内部、或在属性内就忽略掉。
2 识别属性
识别处标记的首部,之后出现属性,有两种情况:
1)单独的英文字母或数字序列,后面没有尾随“=”或“一系列空白符=”,可是做一个属性,如checked属性。(后面的描述大多可以间隔空白符,不一一说明了)
2)后面尾随“=”或“一系列空白符=”,则得到一个属性的名称,等号后面的如果出现“"”
则降下一个“"”之间的内容当作属性(这里不支持c风格的转移序列,而是用HTML转移序列。)。另一种情况,等号后面没有出现“"”,简单的把跟随的文字序列作为属性值,直到发现空白符或>符号。
属性结束后发现>符号,则一个标记处理完毕
3。实际系统中,结束标签可以忽略,</XXXX 只要发现就搜索到下一个>,将中间的字符忽略。
处理中需要使用堆栈,每识别完一个开始标签将其压栈,发现某一个标记的结束标签后,在堆栈中不断弹出栈顶元素,每弹出一个元素此元素的作用域就结束了,直到弹出的元素是相应的开始标记为止。实际上结尾标记从来不进入堆栈,这样便解决了标记不匹配的问题。

从实现的角度看,可以把超文本注释、属性的引号字符串,连续的非空白符文本,作为处理的最小单元,只可以出现在栈顶,当他们在栈顶时,压栈操作可以忽略。这样就只需要一遍单向扫描。至一点对实际的浏览器是必须的,因为要在文件完全下在完之前显示。


Putao 2000-09-08
  • 打赏
  • 举报
回复
To deanjiang:
“空白符不只是空格,可以是“\n\b\r\s”...”
是什么意思,请指教。
kill_kill01 2000-09-04
  • 打赏
  • 举报
回复
关注
Putao 2000-09-04
  • 打赏
  • 举报
回复
我只想实现让程序知道:这是一个标签.
请先回答这个最简单的问题!

各位大虾,拜托了!
killjapan05 2000-09-03
  • 打赏
  • 举报
回复
ok?
mars22 2000-09-03
  • 打赏
  • 举报
回复
如果用MFC编程,倒是可以直接使用CHtmlView类。
IE有的功能它基本都有。
Putao 2000-09-03
  • 打赏
  • 举报
回复
我只想实现让程序知道:这是一个标签.
请先回答这个最简单的问题!
Putao 2000-09-03
  • 打赏
  • 举报
回复
我只想实现让程序知道:这是一个标签.
请先回答这个最简单的问题!
Putao 2000-09-03
  • 打赏
  • 举报
回复
那么,如果我是想编一个网页语法检查器,改如何实现呢?
ahao 2000-09-03
  • 打赏
  • 举报
回复
HTML的的标签配对不是很严格,某些可以只有前半部,
某些可以只有后半部...

Putao 2000-09-02
  • 打赏
  • 举报
回复
to llt:
是英文的,头大了!!!
llt 2000-09-02
  • 打赏
  • 举报
回复
简单的办法就是找一个免费网页浏览器原码来参考。若想了解原理,可以看rfc1945、rfc2068。
bokei 2000-09-02
  • 打赏
  • 举报
回复
编译原理说白了就是讲如何对程序进行编译的算法,有很多讲这问题的书。

通常讲编译原理的书里都有一部分是讲语法分析的,可以看一下,原理都一样的。

killjapan05 2000-09-01
  • 打赏
  • 举报
回复
好好看看编译原理吧????
读入一字符串,然後进行处理!与编译原理有何干系?
Putao 2000-09-01
  • 打赏
  • 举报
回复
什么是编译原理,你有吗?请给我Email一份
subzero 2000-08-30
  • 打赏
  • 举报
回复
好好看看编译原理吧!
课程目的:OpenCV是应用非常广泛的开源视觉处理库,在图像处理、计算机视觉和自动驾驶中有着非常重要的作用。课程设计特色:(课程当前为第一期)1、C++与Python双语教学Python语言是在计算机视觉中应用最多的一种语言,在工作中,深度学习模型的训练基本上都是使用Python语言编写的训练代码。OpenCV在这个过程中用于图像的预处理(例如图像读取、数据增强)和后处理,还可以用于显示处理的结果,功能强大,使用方便。但是在功能的部署的时候,不管是部署在服务端还是PC端,开发语言基本上用的是C++,所以如何有效的使用OpenCV进行模型或者功能的部署尤为重要。C++语言应用的好坏,在面试中可以看出一个面试者的工程实践能力的强弱,两种语言的开发掌握好了可以使工作如虎添翼。2、全模块讲解我出版了一本图书《学习OpenCV4:基于Python的算法实战》,虽然这本书是写的基于Python的算法实战,但是实际上这本书有详细的介绍算法的C++接口,还有一些C++方向的案例,是以Python为主。图书出版的时候就想双语写作,只是限于篇幅没有成行。本课程不仅采用双语教学,更是对C++的每个模块都做讲解,我们知道,很多的书其实只讲imgproc,如果你翻开一本书图像的形态学运算和图像滤波都是作为独立章节讲解的,那么这本书基本上就可以确定是只是讲解了imgproc模块,但是其他的模块在工作中也有很重要的作用。例如:core模块定义了C++的基本数据结构和基本运算(如四则运算);highgui模块是可视化与交互的模块;feature2d是特征点与特征匹配相关算法所在的模块;ml是机器学习相关的模块;dnn是深度学习相关的模块,可以使用OpenCV进行深度学习模型的部署。这些是很多的书和课程都不会讲的。3、讲解细致本课程会从环境搭建开始讲解,环境搭建尤为重要。从我多年的授课经验总结来看,如果只是给了代码,很多的入门用户环境问题处理不好的话,后面的学习很难进行下去,甚至会丧失学习的信心。4、会讲解C++和Python的开发语法问题是入门用户的一大难关,特别是C++语言。大学只是教授了C语言相关的内容,C++很多同学只懂一点皮毛,所以写代码步履维艰,我们在讲解代码的过程中会顺带讲解C++和Python的内容。我们还会讲解编译相关知识,还有库的装载与链接,这些是学校里不会教的,目前也几乎没有课程讲解。5、讲师经验丰富我讲解过C++和OpenCV的多个课程,广受学员好评。我出版过两本图书《深度学习计算机视觉实战》和《学习OpenCV4》,两本书都是细致入微的讲解,主要针对的就是初学者,所以能够很好的处理课程的难易程度。6、讲义准备充分讲义准备的充分细致,标识清楚明确,重点和疑难点突出。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧