【发布时间】:2015-06-04 18:46:09
【问题描述】:
首先,我不学习计算机科学,我只是对这个学科感兴趣。
解析器基本上是正确的:
- 读取输入
- 创建令牌
- 实际解析令牌并创建 AST
所以我认为,为了确定一个单词是否属于常规语言,您需要使用 FSM,而对于 CF 语言,您需要一个解析器,因为可能存在递归结构。因此,存在用于常规语言的扫描器生成器和用于 CF 语言的解析器生成器。
但是现在我读到你可以为正则表达式构建一个像样的递归解析器:
http://matt.might.net/articles/parsing-regex-with-recursive-descent/
那么这一切是如何结合在一起的呢?
为什么我需要解析常规语言?我认为有限状态机就足够了吗?
如果,例如我想识别java程序中的块cmets(即/* .. */),我只需要写一个FSM,所以基本上是一个switch-case-statement。我不需要解析器...
感谢您的帮助和澄清!
【问题讨论】:
标签: regex parsing regular-language context-free-language