我正在为C编写一个PHP预处理器作为实验,我想创建一个包含符号,如:
//? include("myfile.h");
我正在努力绕过处理递归包容的好方法。
例如:
交流转换器:
//? include ("a.h");
int main(int argc, char **argv)
{
return 0;
}
A.H :
#ifndef A_H
#define A_H
//? include ("b.h");
//? include ("c.h");
#endif /* A_H */
b.h :
#ifndef B_H
#define B_H
#endif /* B_H */
c.h :
#ifndef C_H
#define C_H
#endif /* C_H */
我希望这个解析器接收我想要预处理的初始文件,并输出结果,例如(是的我剪切/粘贴):
#ifndef A_H
#define A_H
#ifndef B_H
#define B_H
#endif /* B_H */
#ifndef C_H
#define C_H
#endif /* C_H */
#endif /* A_H */
int main(int argc, char **argv)
{
return 0;
}
通过以下方式:
php parser.php infile.c outfile.c
我正在考虑如何实现这样的解析器,但我正在努力表达这种行为是如何工作的。
这是我目前的思考过程,这个过程微不足道,但给了我一个开始的地方:
<?php
$infile = $argv[1];
$outfile = $argv[2];
$startFile = file_get_contents($infile);
/* begin transformations */
function transform($t)
{
/* not sure how to express the transformation */
return $t;
}
$output = transform($startFile);
/* end of transformations */
file_put_contents('out.c', $outfile);
?>
我知道包含模式是:
$regex = "/[\/][\/][?](?:\s+)(?:include)(?:\s*)(?:[(]\s*)(?:(?:[\"](.*)[\"])|(?:['](.*)[']))(?:\s*)[)];/";
我该如何做到这一点?