我已经写了parser_sub.mly
,lexer_sub.mll
它可以解析一个subroutine
. A是由andsubroutine
包围的语句块。Sub
End Sub
实际上,我要处理的原始文件包含一个子程序列表和一些无用的文本。这是一个例子:
' a example file
Sub f1()
...
End Sub
haha
' hehe
Sub f2()
...
End Sub
所以我需要编写parser.mly
and lexer.mll
which 可以通过忽略所有注释(例如haha
,' hehe
等)和调用来解析这个文件parser_sub.main
,并返回一个子例程列表。
谁能告诉我如何让解析器忽略所有无用的句子( a
Sub
and之外的句子End Sub
)?这是
parser.mly
我试图写的一部分:%{ open Syntax %} %start main %type <Syntax.ev> main %% main: subroutine_declaration* { $1 }; subroutine_declaration: SUB name = subroutine_name LPAREN RPAREN EOS body = procedure_body? END SUB { { subroutine_name = name; procedure_body_EOS_opt = body; } }
for 的规则和解析
procedure_body
很复杂,实际上是在parser_sub.mly
and中定义的lexer_sub.mll
,那么我怎么能允许parser.mly
并且lexer.mll
不重复定义它,而只是调用parser_sub.main
呢?