6
编程语言,正则表达式和形式语言之间的关系是什么
我在网上四处寻找这个问题的答案,似乎每个人都隐含地知道答案,除了我。据推测,这是因为唯一关心的人是受过该学科高等教育的人。另一方面,我却被高中作业深深吸引。 我的问题是,编程语言与形式语言到底有什么关系?在我读过的任何地方,都说着类似“形式语言用于定义编程语言语法”的内容。 现在,根据我的能力,正式语言是一系列适用于一组特定符号(该语言的字母)的生产规则。这些生产规则定义了一组转换,例如: b -> a aaa->c 可以这样应用: abab->aaaa aaaa-> ca 顺便提一句,如果我们将形式语言的字母定义为{a,b,c},则a和b是非终结符,而c是终结符,因为它不能转换(如果我错了,请纠正我那)。 那么,考虑到所有这些,这到底在编程语言中有什么用呢?通常还会指出,正则表达式用于解析其文本形式的语言,以确保语法正确。这很有道理。然后说明正则表达式是由正式语言定义的。正则表达式返回true或false(至少以我的经验),这取决于代表正则表达式的有限状态自动机是否达到目标点。据我所知,这与转换无关。 对于程序本身的编译,我认为一种形式语言可以将代码转换为连续的较低级别的代码,并最终通过一组复杂的规则到达汇编,然后硬件可以理解这些规则。 从我的困惑来看,这就是事实。我所说的内容可能有很多根本上的错误,这就是为什么我要寻求帮助。 *除非您认为某条(a|b)*b*c->true规则类似于生产规则,否则在这种情况下该规则需要一个有限状态自动机(即regex)。就像我们刚才说的那样,这没有任何意义