为什么括号不是可正则的语言

记得Long long ago,在找一个Vim的括号匹配问题的时候,看到一个说法,说括号是不可正则的。当时也没去深究,就只是记下了这个说法。最近,Coursera开了一 门Automata的课程,就去听了下,里面也说到括号是不正则的,没有给出证明。因此就引出了我的好奇心了。

Coursera上课,选课的时候挺兴奋的,但是往往听了几节之后,就觉得坚持不下去了。我还是喜欢需求驱动的学习,就像现在这样,我为了弄明白为 什么括号是不可正则的,到优酷上听了一个可计算理论和有限自动机的课程,里面给出了括号为什么是不可正则的证明。然后我还买了一本书,《自动机理论、语言 和计算导论》。

证明为什么括号是不可正则的,用泵引理就行了。但是,如果学习就止步于此,那估计一辈子也就没有什么成就了。我现在对自动机理论还有非常多不明白的东西,把括号为什么不可正则这个问题解决了之后,听课看书顿时就失去了目标,突然又无聊了。

很多事情,是很难靠内在驱动去做的。能靠人内在去驱动的事情,往往都是和生存生育有关的。而学习这种东西,说实在的,没有某种激励驱动真的很难坚持下去。

所以,我就写博客了。就像两年前,我把学习Semantic Web的过程用博客记录下来一样。这次我也想把我学习自动机理论的过程写下来。

我写博客的习惯,一直都在假想一个小白看我的文章,要怎么样才能说得让他看完我的博客就能明白我讲解的知识点。这样对自己要求就很高了,除了文字表述的功力上,还要求你自己就得对这个知识点弄得非常明白。但就是这个过程,能让你掌握一个知识点。

由于自动机理论相当庞大,而且挺难的,我这才开始学习,想来挺久该从哪里入手写起。后来想想,干脆就直接从泵引理开始吧。

-------- 万恶的分割线 -----------
写着写着,想到自动机理论涉及很多的数学公式和图表,Markdown好像不支持。然后就去找了好多工具,pandoc,ASCIIDoc等,然后还用
RStudio和Knitr,发现这个工具挺好的。最后的最后,发现Mou本身就支持数学公式和表格,真是浪费了一晚的时间啊。
-------- 结束 --------------

时间: 2024-10-17 02:49:00

为什么括号不是可正则的语言的相关文章

shell中各种括号的作用

小括号里是命令大括号是变量值   一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b

Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)

一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b c d) 2.双小括号 (( ))

shell中各种括号的作用()、(())、[]、[[]]、{}

一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b c d) 2.双小括号 (( ))

shell中的括号作用

一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b c d) 2.双小括号 (( ))

shell 中各种括号的作用()、(())、[]、[[]]、{}

一.小括号,圆括号 () 1.单小括号 () 命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. 命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. 用于初始化数组.如:array=(a b c d) 2.双小括号 (( )) 整

Linux Shell 中各种括号的作用

一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b c d) 2.双小括号 (( ))

shell 中()、[]、{}、(())、[[]]等各种括号的使用

11 shell中内置关键字[[]]:检查条件是否成立 1.小括号.圆括号() 1.1 单小括号() 用途     命令组 括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用. 括号中多个命令之间用分号隔开,最后一个命令可以没有分号, 各命令和括号之间不必有空格. 22 shell组命令与子进程 命令替换 等同于 cmd ,shell扫描一遍命令行,发现了(cmd)结构,便将(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令. 有些shel

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

[ SHELL编程 ] shell中各种括号的使用方法

转载自:http://www.jb51.net/article/60326.htm 在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下:1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string},${var:=string},${var:?string} 5.$((exp)) 6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)现在分