Regex 正则表达式在词汇分析中的应用

Regex 正则表达式在词汇分析中的应用,regex,parsing,compiler-construction,lexical-analysis,Regex,Parsing,Compiler Construction,Lexical Analysis,我试图理解自底向上解析的实现方式 我将正则表达式转换为NFA,然后再转换为DFA,以及DFA如何表示为二维表 问题是,这不是一个很大的表,所有字母都列在表的一边吗?这真的是应该实施的方式吗 另一个问题是据我所知,大多数语言都有一些现成的正则表达式实现。这些正则表达式实用程序是否可以用作词法分析部分的现成实现,然后直接将解析表输出 我试图理解自底向上解析的实现方式 不,你不是。你的问题是关于词汇分析的。与解析无关 我将正则表达式转换为NFA,然后再转换为DFA,以及DFA如何表示为二维表 同样,这

我试图理解自底向上解析的实现方式

我将正则表达式转换为NFA,然后再转换为DFA,以及DFA如何表示为二维表

问题是,这不是一个很大的表,所有字母都列在表的一边吗?这真的是应该实施的方式吗

另一个问题是据我所知,大多数语言都有一些现成的正则表达式实现。这些正则表达式实用程序是否可以用作词法分析部分的现成实现,然后直接将解析表输出

我试图理解自底向上解析的实现方式

不,你不是。你的问题是关于词汇分析的。与解析无关

我将正则表达式转换为NFA,然后再转换为DFA,以及DFA如何表示为二维表

同样,这与解析无关。它与实际的词汇分析也没有什么关系。这是一个关于词法分析器生成的问题。你现在离你所陈述的主题有两步之遥

问题是,这不是一个很大的表,所有字母都列在表的一边吗

它将尽可能大以表示DFA,而DFA又取决于您指定的规则。这不是一个真正的问题

这真的是应该实施的方式吗

有很多方法可以表示DFA。例如,flex1提供了三个或四个选项,每个选项都有不同的空间/时间权衡。您几乎可以肯定地从实现字符类开始,这将立即消除“字母表中列在其一侧的所有内容”

另一个问题是据我所知,大多数语言都有一些现成的正则表达式实现。这些正则表达式实用程序是否可以用作词法分析部分的现成实现,然后直接将解析表输出

同样,解析与词法分析无关。 DFA已经是“词汇分析的现成实现”。 根据@Qtax的评论,整个规则集的单个DFA要比一系列正则表达式快得多。几乎可以肯定,它也更加紧凑。
这些正则表达式实用程序可以用作词法分析的现成实现吗?当然可以,但DFA比常见的回溯正则表达式库快得多。正则表达式与任何类型的解析都无关,无论是自下而上、自上而下、从左到右还是从右到左。它们用于扫描器,而不是解析器。生成NFA和DFA的过程先于两者。它发生在编译时。这是我正在看的那本书。如果你能介绍一本关于实际解析的书,我会很高兴。@Vahid你引用的“绿龙”一书是关于词法分析、解析、语义分析、代码生成、优化、寄存器分配、流分析以及其他很多东西的。你的问题是关于生成词法分析器。实际上我是在分析之后。我只是根据书中的假设,词法分析是句法分析的基础。我想我错了。谢谢你的回答。然后你应该看看关于DPDAs和LALR解析器的部分。