我正在编写一个分析许多独立文件的分析器。所有文件都具有相同的结构:它有一个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()
等。
但是,在当前阶段,如果在解析过程时解析引发错误,它会返回 a Parser.Error
,并停止解析整个文件。结果,无法解析麻烦程序之后的程序。
我想做的是在某处进行错误处理,以便let procedures = Parser.main Lexer.token buf
始终成功,即使在程序的一部分内部无法解析(在这种情况下,它的值可以是UnparseableProcedure
,而不是抽象语法树)。
目的实际上是为每个文件解析尽可能多的程序,然后尽可能多地分析它们......
有谁知道该怎么做?