首先,我不学习计算机科学,我只是对这门学科感兴趣。
解析器基本上是这样做的:
因此,我认为,为了确定一个单词是否在一种常规语言中,您可以使用FSM,对于CF语言,您需要一个解析器,因为可能存在递归结构。因此,常规语言存在扫描器生成器,CF语言存在解析器生成器。
但现在我读到,您可以为正则表达式构建一个递归的、体面的解析器:
http://matt.might.net/articles/parsing-regex-with-recursive-descent/
那么,这一切是如何进行的呢?
为什么我需要解析常规语言?我以为有限状态机就够了?
例如,如果我想识别java程序中的块注释(即/* .. */),我只需要编写一个FSM,所以基本上是一个开关-case语句。我不需要解析器.
感谢您的帮助和澄清!
发布于 2015-03-31 12:50:25
正则表达式可以匹配的内容与解析正则表达式所需的内容之间存在差异。例如,正则表达式可以包含嵌套组,因此不能解析带有正则表达式的组。例如,您必须“计数”嵌套的括号对,这超出了常规语言的能力。
另见:Is there a regular language to represent regular expressions。
https://stackoverflow.com/questions/29368463
复制相似问题