我正在阅读O'Reilly的Flex & Bison,想知道预先学习正则表达式是否有助于开发编程语言?
答案 0 :(得分:14)
Regular expressions可以使用defined formal language theory,因此它们是互补的概念。
在开始构建语言之前,先了解正则表达式和正式语言理论,这是一个好主意。
所以回答你的布尔问题:是。
答案 1 :(得分:3)
传统编程语言的语法正则表达式非常简单,因此,严格来说,您不需要成为编写编译器的正则表达式专家。另一方面,regexp属于基本的编程技能,所以我说你需要了解它们......几乎所有的东西。
答案 2 :(得分:1)
我会这么说。听起来好像你在Flex& amp;的例1.3中遇到了Flex扫描器。野牛(第5页):
/* 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中的注释的标记)。它们也是一般用于编程的有用技术,所以我现在继续学习它们。
答案 3 :(得分:0)
如果您正在创建解释语言,则可以使用正则表达式来识别代码行中的各种原子。
答案 4 :(得分:0)
也许我偏离了轨道,因为其他的回答者认为你在询问PCRE或其他什么。但是,如果你在谈论发明一种语言,那么正则表达式与语法和其他任何东西一样重要。
正则表达式是推送自动机和确定性有限自动机之间的Chomsky层次结构的一个步骤,这是解析任何东西时特别需要的非常重要的东西,尤其是代码。