我试图构建一个脚本来从源文件中提取一些Erlang代码,但是我的方法不起作用。
{ok, Forms} = epp:parse_file("src/day_tasks.erl", [{includes, "include"}]),
file:write_file("/projects/result.txt",
io_lib:format("~p", [Forms])).
这样做是可行的,AST已经构建好了,但是输出中缺少了一些函数。虽然它们的属性已经就位。但是我在构建好的语法树中看到了很多这样的元组:
{error,{10,epp,{include,file,"cards.hrl"}}},
{error,{320,epp,{undefined,'LONG_TASK',none}}}
我知道它的where include属性和where是模块中定义的一个宏,在函数体中使用,但我不知道的是我能做些什么。
我试着用另一种方法得到这棵树,它看起来是这样的:
{ok, Data} = file:read_file("src/day_tasks.erl"),
{ok, Tokens, _Lines} = erl_scan:string(binary_to_list(Data)),
{ok, Abs} = erl_parse:parse_form(Tokens),
file:write_file("/projects/result1.txt", io_lib:format("~p", [Abs])).
但是erl_parse:parse_form(标记)失败,并返回错误:
** exception error: no match of right hand side value {error,{6,erl_parse,["syntax error before: ","'-'"]}}
第6行是
-compile(export_all).
模块属性位于模块名称属性之后。所以我在这里,我被卡住了,不知道我还能做什么。
什么是正确的方法来获得完整的语法树的模块?
1条答案
按热度按时间i34xakig1#
includes
元组的第二个元素被定义为类型IncludePath,它是一个列表:文件:名称()=字符串()|原子()|深度列表()