gpt4 book ai didi

regex - 正则表达式用于构建解析器吗?

转载 作者:行者123 更新时间:2023-12-03 23:25:20 25 4
gpt4 key购买 nike

这只是出于好奇而提出的一个问题,因为最近我一直需要越来越多地解析和使用正则表达式。.似乎,对于我在搜索中遇到的有关某种解析的问题,总有人会说,何时问了一些与正则表达式有关的问题,“正则表达式不适合这样做,而使用这样的解析器”。。。为了更好地了解正则表达式,我认为大多数事情都是可能的,因为它相当复杂且耗时,必须考虑许多不同的可能性,当然,它必须与条件语句和循环结合以构建任何类型的解析器..因此,我想知道regex是用于构建大多数解析器的工具还是其他工具?我只是在想,因为我可能需要构建一些相当复杂的自定义解析器,而这些解析器不一定要使用现有的解析器。

感谢您提供任何信息,因为我似乎找不到直接的答案。

最佳答案

通常,您将使用两种(至少)类型的工具来构建解析器。

第一部分是词法分析-将字符分成标记并过滤掉注释和空格。该部分通常使用正则表达式完成。嗯,通常使用扫描仪生成器完成该操作,该生成器将成对的正则表达式和代码对转换为一个程序,该程序在识别正则表达式时执行相应的代码。事实证明,这比每次测试每个正则表达式更有效,并且由于其他各种原因,它也更好地工作。 FLEX是C语言中常用的工具。

解析器的第二部分是语法。最典型的工具是另一个程序生成器,它接受上下文无关的语法(CFG),该语法带有注释,用于解释“词性”部分。 CFG能够表达诸如平衡括号之类的东西,而正则表达式则不能(除非已通过CF功能对其进行了扩展,因此从数学意义上讲并非严格意义上的“正规”)。但是带有规则的CFG非常好,因为您可以将语义含义附加到语言的短语结构中。 BISON是C中此部分的常用工具。

但是我实际上告诉了你一点谎言。您会看到,每种真正的编程语言都具有无法在无上下文框架中表达的部分。例如,您需要使用它来连接变量的定义,以使您知道要生成的指令以及对它的操作是否合法。通常认为这超出了解析的范围,但是有些东西像“属性语法”一样,就像CFG一样,具有扩展的功能,这些功能甚至可以使这些上下文相关性更易于编写和使用。

现在,没有规则说您必须使用此类工具。许多简单的语法很容易用手写工具进行处理。例如,可以将LISP的S表达式简单地扫描为:

如果以数字开头,请阅读一个数字。
如果以字母开头,请阅读符号。
如果是空格,请跳过它。
如果它是开放式括号,则跳过它,递归该例程以获取值,并期望有一个封闭式括号。

好吧,字符串和其他功能还有更多复杂性,但这是基本思想。解析FORTH甚至更简单,因为它不构建递归数据结构。

无论如何,无论您从事的项目是什么,这都应该使您继续前进。

关于regex - 正则表达式用于构建解析器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com