4

尽管我已经学习了 C 和 C# 以及其他一些次要语言,但我对 C 还是很陌生。我的问题是:如何检查 HTML 文件的语法是否正确?我是说:

<html><head></head><body>random stuff

<tag></tag>random stuff</body></html>

我想过做一个堆栈,但我迷路了。从文件 char 中读取 char 并放入这么多ifs 听起来太复杂了。

有谁知道我怎么写这个?正如我所说,我是 C 的新手,因此如果您能在解释中附加一些代码,将不胜感激。谢谢!

4

4 回答 4

3

您需要为 HTML 编写一个简单的 Lexer 和 Parser。

查看 Lex(或 Flex)和 Yacc(或 Bison)以及如何使用它们。

有关旧版本 HTML 的简单 Yacc 语法,请参阅此内容 用于 HTML 的简单 Yacc 语法

这是另一个简单的 XML 解析器:XML 语法XML 词法分析器

我的建议:不要从头开始编写所有内容。使用预先存在的工具来帮助您做您想做的事。使用 Lex 和 Yacc 比手写词法分析器/解析器更不容易出错

于 2012-10-22T09:57:56.017 回答
2

你为什么问这个?您想要挑战还是只是想检查您的 html 是否经过验证?如果是后者,您可以使用http://sourceforge.net/projects/w3cmarkupvalida/

它是用 C# 编写的,并使用 W3 HTML Validator 应用程序 (http://validator.w3.org/) 的 API 来验证 HTML 文档,并作为响应接收它是否有效以及错误和警告。

当然,您也可以直接使用http: //validator.w3.org /...

于 2012-10-22T10:05:40.217 回答
1

我认为使用堆栈是个好主意。您可以按照以下方法
1. 读取缓冲区中的一行。(假设您的 HTML 文件格式正确)
2. 在行中的 '<' 字符处停止。
3. 读取另一个缓冲区中的字符,直到遇到'>'。
4. 标签是否包含'/'。如果否,则转到 5,否则转到 6。
5. 将此标签推入堆栈。
6. 从堆栈中弹出一个标签,并与刚刚读取的标签进行比较..
7. GOTO 1 直到文件被完全读取

于 2012-10-22T10:01:59.583 回答
0

使用 CSS/HTML 验证器

于 2013-01-08T05:24:22.573 回答