【发布时间】:2013-10-19 15:27:56
【问题描述】:
我正在编写一个分析许多独立文件的分析器。所有文件都有相同的结构:它有一个Initiation(),后面跟着几个过程。例如:
Sub Initiation()
...
End Sub
Sub procedure1()
...
End Sub
Sub procedure2()
...
End Sub
...
Initiation() 启动一切,然后每个程序的分析都是独立的。在分析它们之前,我需要先解析它们。
在main.ml 中我使用let procedures = Parser.main Lexer.token buf 来调用解析。如果一切顺利,procedures 包含过程的抽象语法树:Initiation()、procedure1() 等。
但是,在当前阶段,如果在解析过程时解析引发错误,它会返回Parser.Error,并停止解析整个文件。导致麻烦程序之后的程序无法解析。
我想做的是在某处进行错误处理,以便let procedures = Parser.main Lexer.token buf 始终成功,即使无法解析程序的一部分(在这种情况下,它的值可以是UnparseableProcedure,而不是抽象语法树)。
真正的目的是为每个文件解析尽可能多的程序,然后尽可能多地分析它们......
有人知道怎么做吗?
【问题讨论】: