Html 在 javacc 中解析

Html parsing in javacc

我是 javacc 的新手,被要求使用 javacc 代码扩展基本的 html 解析。 我的问题 - <script> 包含很多字符 - 例如 >< 具有其他定义。 例如 - if(indexOf("?")) > 3。我阅读了有关词法状态的信息,但了解不多。

谁能告诉我如何对一个字符进行多个定义。一个例子的解释真的对我有帮助。

并且 - 是否真的需要解析上述示例?你怎么忽略这些细节?

另外,对于搜索引擎做基本解析的人来说,是否需要一些标签,比如<style>?如果没有,你如何完全忽略javacc中的标签?

假设您希望“<”和“>”仅允许出现在标签和结束标签中。除了 <script></script> 标签之间,它们应该是允许的。下面应该做的

// In default state, "<script>" changes to IN_SCRIPT state
TOKEN : { <SCRIPT_TAG : "<script>" > : IN_SCRIPT }
// In both states "</script>" is recognized and goes to DEFAULT state. 
<*> TOKEN : { <END_SCRIPT_TAG : "<script>" > : DEFAULT }
// Other tags and end tags are only recognized in the default state.
TOKEN : { <OTHER_TAG : "<" (["a"-"z"])* ["/"] ">" > }
TOKEN : { <END_OTHER_TAG : "</" (["a"-"z"])* ">" > }
// Characters not in scripts, tags, or end tags
TOKEN : { <CHAR : ~["<",">"] }
// Characters in scripts
<IN_SCRIPT> TOKEN : { <CHAR_IN_SCRIPT : ~[] }
// Characters not allowed
TOKEN : { <UNEXPECTED_CHARACTER : ~[] }

如果您希望 TokenManagerError 而不是 ParseException 在不应该出现的小于号和大于号处抛出,请省略最后一条规则。

这个答案只是为了说明词汇状态的使用。它不是为了反映 HTML 关于小于和大于符号的规则,我不知道。