1/11《编译原理》第一次作业参考答案一、下列正则表达式定义了什么语言(用尽可能简短的自然语言描述)
b*(ab*ab*)*所有含有偶数个a的由a和b组成的字符串
c*a(a|c)*b(a|b|c)*|c*b(b|c)*a(a|b|c)*答案一:所有至少含有1个a和1个b的由a,b和c组成的字符串
答案二:所有含有子序列ab或子序列ba的由a,b和c组成的字符串
说明:答案一要比答案二更好,因为用自然语言描述是为了便于和非专业的人员交流,而非专业人员很可能不知道什么是“子序列”,所以相比较而言,答案一要更“自然”
二、设字母表∑={a,b},用正则表达式(只使用a,b,,|,*,+,
)描述下列语言:1
不包含子串ab的所有字符串
不包含子串abb的所有字符串
不包含子序列abb的所有字符串
a*注意:关于子串(substring)和子序列(subsequence)的区别可以参考课本第119页方框中的内容
~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~~\(≧▽≦)/~《编译原理》第二次作业参考答案一、考虑以下NFA:1
这一NFA接受什么语言(用自然语言描述)
所有只含有字母a和b,并且a出现偶数次或b出现偶数次的字符串
构造接受同一语言的DFA
答案一(直接构造通常得到这一答案):2/11答案二(由NFA构造DFA得到这一答案):二、正则语言补运算3
画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串
画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串
3/11规律:构造语言L的补语言L’的DFA,可以先构造出接受L的DFA,再把这一DFA的接受状态改为非接受状态,非接受状态改为接受状态,就可以得到识别L