我正在读一个文件说x.c,我必须找到字符串“shared”。一旦找到类似的字符串,就必须完成以下操作。
示例:
shared(x,n)
输出必须是
*var = &x;
*var1 = &n;
指针可以是任何名称。输出必须写入不同的文件。怎么做?
我正在使用lex和yacc为并发平台开发源代码编译器。这可以是用C编写的例程,或者如果你可以使用lex和yacc。有人可以帮忙吗? 感谢。
答案 0 :(得分:1)
如果你声明,参数只能是变量而不是任何其他表达式,那么有几个简单的解决方案。
一种是使用正则表达式,并使用非常简单的正则表达式对整个文件进行简单的搜索/替换。
另一个是简单地将整个源文件加载到内存中,使用strstr
搜索"shared("
,并使用例如strtok
获取参数。将所有其他内容逐字复制到目的地。
答案 1 :(得分:0)
利用C预处理器。
将它放在文件的顶部
#define shared(x,n) { *var = &(x); *var1 = &(n); }
并通过cpp
运行。这也将包括外部资源并替换所有宏,但您只需从代码中删除所有#something
行,使用注入的预处理器规则进行转换,然后重新添加它们。
顺便说一句,为什么不在头文件中设置一个简单的宏来供开发人员使用?
有疑问:var
和var1
来自哪里?
编辑:如johnchen902所示更正
答案 2 :(得分:0)
说到预处理器,我会这样做:
#define shared(x,n) (*var=&(x),*var1=&(n))
为什么我认为它比esseks的答案更好? 假设这种情况:
if( someBool )
shared(x,n);
else { /* something else */ }
在esseks的回答中,它将成为:
if( someBool )
{ *var = &x; *var1 = &n; }; // compile error
else { /* something else */ }
在我的回答中,它将成为:
if( someBool )
(*var=&(x),*var1=&(n)); // good!
else { /* something else */ }