编译原理编程

来源:百度知道 编辑:UC知道 时间:2024/05/05 18:19:56
给出一个正则表达式和自动机,使之表示满足下面条件的0、1序列。
1)只包含两个1
2)不包含连续的1
3)包含偶数个1
这三题中任选一题编程序,用C或C++,要有编译原理的思想。重要的步骤最好有注释,如果答案理想的话,会多加分的。非常感谢。

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。 目前各个大学使用的教材机械工业出版社、国防工业出版社出版的《编译原理》。

1) 0*10*10*

2) 0*(10+)*(1|0)

3) (0*10*10*)*

第一题跟第三题是差不多的

这时候可以发现,只要用一个count来做对错的识别就能解决,并不是没有用到state状态,而是该状态变为隐性了,如下

/**

* @fn int check_data(char* d_line,int n)

* @brief 检查资列串是否符合给定的正则表达式

* @return 0 不符 ; 1 符合

*/

int check_data(char* d_line,int n){

int i , count ;

for( count = 0 , i = 0 ; i < n ; i++ ){ // 只要算出1的个数即可

if( d_line[ i ] == '1' ) count++ ;

}

return (1-(count&1)); // 当count奇数表示失败 ; 当count偶数成功