关于词法方面解析的一些实践

前端之家收集整理的这篇文章主要介绍了关于词法方面解析的一些实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

读了《Let's Build a Compiler》前三章,对词法解析工作有一些自己粗浅的认识:

{{

单纯的词法解析,当然离不开文法描述,比如BNF范式描述之类的。

但是落实到代码实现层面,都有一个比较类似的模式描述这些 解析过程

[吃着碗里的,瞧着锅里的。吃完碗里的,立即从锅里捞一碗,再吃着碗里的,瞧着锅里的]
在流的例子中,“瞧着锅里的”这个动作是由标准库代劳的,如果要解析字符串,那么这个动作就需要自己搞定了,不过也不困难。


比如:
char Look; // 这就是个碗
GetChar(); // 这个就用来从锅里捞一碗到碗里
其他所有的解析函数,都是解析Look这个碗里的内容,并据此作出决定是否要从锅里捞一碗。
只要碗里的吃完了,立即从锅里捞一碗,即任何时候Look利用完后,一定要带上一句GetChar()调用

忽略空白字符的功能,需要调用SkipWhite()函数,该函数检测Look是否为空白字符,是的话,则根据上一条规则,利用完Look了从锅里捞一碗,即调用GetChar(),再检测,如此往复,直到Look不为空白字符时停止。即每捞一碗都保证碗里的不是老鼠屎。

}}

为了验证这个总结的正确性有效性,尝试用这个思路写了个XML解析器,很快就搞定了,当然我没写查询接口。以前没写过这种解析器,总还感觉挺复杂的,实际动手一写,发现也就那么回事。这个xml解析器自动忽略掉了xml声明部分、文档验证部分。支持的部分能够满足平时工作中碰到的大部分xml解析的场合。

===============================================

json也能照这个法子给搞定喽。

猜你在找的XML相关文章