用M编写解析器,而不是规则消耗
我正在为自己的娱乐编写一个HTML解析器,我想试试M.
我的工作基于HTML 4.01标准,并在那里说
虽然是STYLE和SCRIPT元素
使用CDATA作为他们的数据模型
必须处理这些元素,CDATA
用户代理不同。标记和
必须将实体视为原始文本
并按原样传递给应用程序。
第一次出现这个角色
序列“< /”(结束标记打开分隔符)
被视为终止结束
元素的内容。有效
文件,这将是结束标签
对于元素。
我想了一会儿,我真的想做的就是这样
syntax Main
= "<script>" Script "</script>"
;
token Script
= TakeWhileNot("</") // this is not valid M grammar
;
我发现自己发现我想要执行某种匹配的标记化规则,直到我达到一个开放的尖括号&lt;然后是正斜杠/。
如果转义序列是单个字符,这不会成为问题,因为我可以写这个。
token Script
= ScriptEscape+
;
token ScriptEscape
= !"<"
;
这样可行,不确定我是否正确地采用这种方式,但问题与我在另一种语言中嵌入了一种语言有关,但在这种情况下我并不关心脚本语言所以我只是想要跳过一个头。
没有找到相关结果
已邀请:
1 个回复
禽兢玫坞劲
现在这是有效的MGrammar,转化为: 不要拿'&lt;'或者采取'&lt;'没有跟着'/' 哪个会消耗任何东西,直到遇到&lt; / token而不消耗它。