Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 如何在LEX中将for循环转换为while循环?_Compiler Construction_Flex Lexer_Yacc_Lex_Lexical Analysis - Fatal编程技术网

Compiler construction 如何在LEX中将for循环转换为while循环?

Compiler construction 如何在LEX中将for循环转换为while循环?,compiler-construction,flex-lexer,yacc,lex,lexical-analysis,Compiler Construction,Flex Lexer,Yacc,Lex,Lexical Analysis,我被困在一个程序中,我必须在不改变程序含义的情况下将“for loop”/“do while loop”转换为“while loop”。循环中可能有循环,等等。输入将是一个C 语言程序和输出将是有效的C语言程序 到目前为止,我得到的解决方案是从一个文件中读取一个C程序,如果我检测到一个for语句,我会取出初始值设定项,并在“时将“的”替换为” 但是我不知道怎么做。作为提示,for循环由初始值设定项、条件和更新程序组成 `for (initializationStatement; testExpr

我被困在一个程序中,我必须在不改变程序含义的情况下将
“for loop”/“do while loop”
转换为
“while loop”
。循环中可能有循环,等等。输入将是一个C 语言程序和输出将是有效的C语言程序

到目前为止,我得到的解决方案是从一个文件中读取一个C程序,如果我检测到一个for语句,我会取出初始值设定项,并在“时将“的
”替换为


但是我不知道怎么做。

作为提示,for循环由初始值设定项、条件和更新程序组成

`for (initializationStatement; testExpression; updateStatement)
    {
        // statements inside the body of loop
    }`
你需要像这样的东西

initializationStatement;
while( testExpression ) {

    updateStatement;
}

这不是在词法分析级别处理的事情,而是在解析器中处理,或者在解析后作为AST->AST转换处理。我觉得OP是在问如何实现这个转换,而不是结果应该是什么。@sepp2k是的,我是在问它的实现。我将如何在我的lex代码中实现它?我应该在这个正则表达式%%mycode%%@AmberBhanarkar中写什么正则表达式中应该写什么是C语言的词法规则,就像在任何其他C词法分析器中一样。正如我在另一篇评论中所说的,这种转换是在解析器中或之后实现的,而不是在lexer中实现的。对不起,这是你在寻找的东西吗(请原谅双关语),它显示的不仅仅是for循环,但是你可以去掉它