2

我正在阅读O'Reilly 的Flex & Bison,想知道事先学习正则表达式是否有助于开发编程语言?

4

5 回答 5

14

正则表达式可以使用形式语言理论来定义,因此它们是互补的概念。

在开始构建语言之前,对正则表达式和形式语言理论有一个很好的理解是一个好主意。

所以回答你的布尔问题:Yes

于 2009-11-27T16:48:49.087 回答
3

传统编程语言的正则表达式语法非常简单,所以严格来说,你不需要成为正则表达式专家来编写编译器。另一方面,正则表达式属于基本的编程技能,所以我想说你需要了解它们......几乎所有东西。

于 2009-11-27T16:49:57.730 回答
1

我会这么说。听起来您在 Flex & Bison 的示例 1.3(第 5 页)中遇到过 Flex 扫描仪:

/* recognize tokens for the calculator and print them out */
%%
"+"      { printf("PLUS\n"); }
"-"      { printf("MINUS\n"); }
"*"      { printf("TIMES\n"); }
"/"      { printf("DIVIDE\n"); }
"|"      { printf("ABS\n"); }
[0-9]+   { printf("NUMBER %s\n", yytext); }
\n       { printf("NEWLINE\n"); }
[ \t]    { }
.        { printf("Mystery character %s\n", yytext); }
%%

如您所见,NUMBER、空格和神秘字符是使用简单的正则表达式定义的(嗯,其他的也是,但它们不是很有趣)。您的编程语言无疑会使用其他正则表达式(例如,考虑十六进制文字、八进制文字、浮点数/双精度数和 C/C++/Java 中的注释)。一般来说,它们也是一种有用的编程技术,所以我现在就继续学习一些关于它们的知识。

于 2009-11-27T18:42:17.500 回答
0

如果您正在创建一种解释性语言,您可以使用正则表达式来识别一行代码中的各种原子。

于 2009-11-27T16:51:27.197 回答
0

也许我偏离了轨道,因为其他回答者认为你在问 PCRE 什么的。但是,如果您谈论的是发明一种语言,那么正则表达式与语法和其他任何东西一样重要。

正则表达式是下推自动机和确定性有限自动机之间乔姆斯基层次结构的一个步骤,这是非常重要的东西,在解析任何东西时非常必要,尤其是代码。

于 2009-11-27T16:56:24.330 回答