首先,我不学习计算机科学,我只是对该学科感兴趣。

解析器基本上可以做到这一点:

  1. 读取输入
  2. 创建令牌
  3. 实际解析令牌并创建AST

因此,我认为为了确定单词是否为普通语言,您需要使用FSM,而对于CF语言,则可能需要解析器,因为可能存在递归结构。 因此,存在用于常规语言的扫描器生成器和用于CF语言的解析器生成器。

但现在我读到您可以为正则表达式构建一个递归的体面解析器:

http://matt.might.net/articles/parsing-regex-with-recursive-descent/

那么这一切又如何呢?

为什么需要解析常规语言? 我以为有限状态机就足够了吗?

例如,如果我想识别Java程序中的块注释(即/* .. */ ),则只需要编写FSM,因此基本上是一个switch-case-statement。 我不需要解析器...

感谢您的帮助和澄清!

#1楼 票数:1

正则表达式可以匹配的内容与解析正则表达式所需的内容之间存在差异。 正则表达式可以包含例如嵌套组,因此您不能使用正则表达式解析它们。 例如,您必须“计数”嵌套的括号对,这在常规语言的功能范围之外。

另请参阅: 是否存在表示正则表达式的正则语言

  ask by user3629892 translate from so

未解决问题?本站智能推荐:

1回复

可以使用正则表达式识别任何上下文无关语言吗?

我知道正则表达式包可以识别比正则语言更广泛的语言集,但是在Python 正则表达式中使用递归正则表达式在文本字符串中查找算术表达式让我想知道是否有可能使用正则表达式识别任何上下文无关语言,以及如果没有,有人可以提供一个反例吗?
1回复

描述正则表达式的语言本身就是正则表达式吗? [关闭]

如果我们用运算符* , |描述正则表达式 和串联. (为清晰起见,我们将其省略),括号( , )和某些字母Sigma字母,那么描述正则表达式的语言本身就是正则表达式吗? 我认为没有,因为我们具有括号的事实意味着没有有限状态机可以识别输入,因此它必须是上下文无关的语言。 注意题外话
1回复

我们如何区分常规语言和上下文无关语言?

为了表达常规语言,我们使用regexp;对于上下文无关的语言,我们可以使用类似堆栈的内存,我知道上下文无关的语言具有诸如中心嵌入之类的一些规范,但是我仍然不确定何时可以让给人知的语言是上下文免费语言? 例如,为什么自然语言不是常规语言。 除中心嵌入外,还有什么原因吗?
2回复

确定性上下文自由语言和常规语言结果的结合?

给定L1是确定性上下文无关语言,而L2是常规语言。 L1 U L2结果DCFL还是常规的? 请给出上下文示例
1回复

证明CFG与常规语言的设置差异也是上下文无关的

我需要帮助证明上下文无关文法A和常规语言B是上下文无关语言之间的差异。 我试图通过这样的例子来证明: 设A = {a ^ nb ^ n | n> = 1} 令B = {w {a,b} * | w至少有三个a} 那么AB应该是{a ^ nb ^ n | 1 &l
2回复

如何使用Regex解析Json?

我想用正则表达式解析此json数据。 但是,我不能。 我试过像这个module.getid(.*) ,但是没有用。 我只想参加这部分-> module.getid(...) 我该怎么做?
2回复

正则表达式:解析锚中不包含img的链接

我试图解析一个正常的链接,但有时与该链接一样,存在一个类似的链接,而不是文本包含图像。 我一直在使用以下模式: "#_blank\\">(.*?)</a>#is ,但这也匹配包含锚点中图像的链接。 我怎样才能只解析那些不包含图像的图片?
1回复

正则表达式本身可以用正则表达式解析吗? [重复]

这个问题已经在这里有了答案: 是否存在用于检测有效正则表达式的正则表达式? 8个答案 我正在阅读正则表达式解析器的代码,并开始怀疑正则表达式的语法本身是否为正则,并且可以用另一个(非常复杂的)正则表达式表示? 我在正则表达式语法中看不到任何递归结构,所以我