0

を解析できる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

  1. 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; } }
    
  2. のルールと解析procedure_bodyは複雑で、実際には と で定義さparser_sub.mlylexer_sub.mllparser.mlylexer.mllますparser_sub.main

4

2 に答える 2