带有epp:parse_file的Erlang模块语法树未满,并且erl_parse:parse_form出现错误

ux6nzvsh  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(119)

我试图构建一个脚本来从源文件中提取一些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).

模块属性位于模块名称属性之后。所以我在这里,我被卡住了,不知道我还能做什么。
什么是正确的方法来获得完整的语法树的模块?

i34xakig

i34xakig1#

epp:parse_file("src/day_tasks.erl", [{includes, "include"}]),

includes元组的第二个元素被定义为类型IncludePath,它是一个列表:

Options = 
    [{includes, IncludePath :: [DirectoryName :: file:name()]} |
    ...

文件:名称()=字符串()|原子()|深度列表()

相关问题