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循环,但是你可以去掉它