Compiler construction 计算机语言被视为有限集,可以对其执行数学上的集运算

Compiler construction 计算机语言被视为有限集,可以对其执行数学上的集运算,compiler-construction,lexical-analysis,Compiler Construction,Lexical Analysis,我正在读关于编译器设计-词法分析的书,我遇到了这句话。我不明白。 在计算机语言上可以执行哪些集合操作?具体执行方式如何?请有人解释一下,在计算机语言中,联合、交叉等是什么样子的 以下是我阅读的链接: 计算机语言是有限集合的唯一意义是我们生活在有限宇宙中的实际限制。在这个有限的宇宙中,一切都有极限。对于许多实际问题来说,这可能是一个有用的视角,但它无助于理解数学模型。(我也不确定你的资料有多有用。就我个人而言,我建议使用一种传统的教科书。) 形式语言理论的框架将语言定义为一组无限的有限字符串。该集

我正在读关于编译器设计-词法分析的书,我遇到了这句话。我不明白。 在计算机语言上可以执行哪些集合操作?具体执行方式如何?请有人解释一下,在计算机语言中,联合、交叉等是什么样子的

以下是我阅读的链接:


计算机语言是有限集合的唯一意义是我们生活在有限宇宙中的实际限制。在这个有限的宇宙中,一切都有极限。对于许多实际问题来说,这可能是一个有用的视角,但它无助于理解数学模型。(我也不确定你的资料有多有用。就我个人而言,我建议使用一种传统的教科书。)

形式语言理论的框架将语言定义为一组无限的有限字符串。该集合只是有效字符串的集合——在本例中是计算机程序

两种语言的交集(被认为是有效句子的集合)就像其他集合交集一样:它由两个集合中的所有事物组成。类似地,两种语言的并集是至少一种语言中的字符串集


例如,我们可以(理论上)构造一组既有效又包含标识符
future
的程序。或JSON或XML字符串集。等等。

我没有读整篇文章,但在你引用的那一段中,没有一句话不包含虚假。我强烈建议您停止阅读该教程,寻找更好的教程。编程语言不是有限集——它们是无限集(加上语义)。虽然正则表达式确实可以匹配有限语言,但它们几乎总是用来匹配无限语言。几乎没有任何编程语言可以与正则表达式匹配——正则表达式只用于词法分析,而不是匹配整个语言。所以说“编程语言是有限集,所以它们可以用正则表达式来描述”在很多方面都是错误的。虽然你可以在编程语言上(或者至少在它们的语法上)执行并集和交集之类的集运算,但这样做几乎毫无意义(将一种语言称为另一种语言的子集或超集的可能例外)。当然不是在编译器设计的背景下。因此,这是另一件在那篇文章中没有意义的事情。我同意@sepp2k的观点,从互联网站点学习解析不仅是不好的,因为你从站点上养成的每个坏习惯都会花费你大约5倍或更多的时间来改掉这个坏习惯并选择正确的方法。我也这样做了尝试使用StackOverflow了解DCGs时出错。因此损失了大约2年的时间。我投了反对票,不是因为这个问题是错误的,而是因为其他人不应该从中发现和学习。投赞成票或反对票都会同意这是一个价值问题;我不这么认为。对不起,投反对票,没什么g个人。