我已经写了parser_sub.mly,lexer_sub.mll它可以解析一个subroutine. A是由andsubroutine包围的语句块。SubEnd Sub
实际上,我要处理的原始文件包含一个子程序列表和一些无用的文本。这是一个例子:
' a example file
Sub f1()
...
End Sub
haha
' hehe
Sub f2()
...
End Sub
所以我需要编写parser.mlyand lexer.mllwhich 可以通过忽略所有注释(例如haha,' hehe等)和调用来解析这个文件parser_sub.main,并返回一个子例程列表。
谁能告诉我如何让解析器忽略所有无用的句子( a
Suband之外的句子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.mlyand中定义的lexer_sub.mll,那么我怎么能允许parser.mly并且lexer.mll不重复定义它,而只是调用parser_sub.main呢?