を解析できるparser_sub.mlyandを書きました。Aは、とで囲まれたステートメントのブロックです。lexer_sub.mllsubroutinesubroutineSubEnd Sub
実際、私が処理したい生ファイルには、サブルーチンのリストといくつかの役に立たないテキストが含まれています。次に例を示します。
' a example file
Sub f1()
...
End Sub
haha
' hehe
Sub f2()
...
End Sub
したがって、すべてのコメント (たとえば、など) を無視して を呼び出し、サブルーチンのリストを返すことで、このファイルを解析できるparser.mlyandを記述する必要があります。lexer.mllhaha' heheparser_sub.main
Subパーサーが役に立たない文 ( aと以外の文) をすべて無視する方法を誰か教えてもらえます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; } }のルールと解析
procedure_bodyは複雑で、実際には と で定義さparser_sub.mlyれlexer_sub.mllてparser.mlyいlexer.mllますparser_sub.main。