用erlang实现提取所有hrl文件中的record
时间: 2024-05-01 09:18:21 浏览: 121
对于提取所有hrl文件中的record,可以使用erlang自带的HRL文件解析器,以下是示例代码:
```erlang
-module(record_extractor).
-export([process/1]).
process(Dir) ->
% 获取目录下所有hrl文件
FileList = filelib:wildcard(Dir ++ "/*.hrl"),
% 遍历每个文件,提取其中的record
Records = lists:flatmap(fun(F) -> extract_records(F) end, FileList),
io:format("Extracted records: ~w~n", [Records]).
extract_records(File) ->
{ok, Tokens, _} = erl_scan:file(File),
{ok, Forms} = erl_parse:parse_form(Tokens),
% 从解析后的Forms中筛选出所有record
Records = lists:flatmap(fun(F) -> filter_records(F) end, Forms),
io:format("Extracted records from ~s: ~w~n", [File, Records]),
Records.
filter_records({record, _, _, Fields}) ->
% 返回记录名称
Name = element(1, Fields),
[Name];
filter_records(_) ->
[].
```
可以将以上代码保存为record_extractor.erl文件,然后在erlang shell中执行如下命令:
```erlang
1> c(record_extractor).
{ok, record_extractor}
2> record_extractor:process("/path/to/hrl/directory").
```
其中/path/to/hrl/directory为存储hrl文件的目录。执行完毕后,即可在控制台上看到提取的所有record。
阅读全文