Thursday, July 15, 2010

Mendapatkan Nomor Baris di BYacc/J

Untuk mendapatkan sampai di baris ke berapa proses parsing dilakukan, gunakan directive %line di spesifikasi JFlex.

Lalu tambahkan method getLineNum():

%byaccj
%line
%column

%{
  private Parser yyparser;

  public Yylex (java.io.Reader r, Parser yyparser) {
    this (r);
    this.yyparser = yyparser;
  }

  int getLineNum () {
    return (yyline+1);
  }

  int getColNum () {
    return (yycolumn+1);
  }
%}

Ekspresi "yyline+1" diperlukan karena JFlex memulai menghitung baris dari 0, bukan dari 1.

Untuk mengambil informasi posisi baris di berkas yang sedang diurai (di-parsing), tambahkan informasi seperlunya di spesifikasi BYacc/J:

private Yylex lexer;

public void yyerror (String strError) {
  System.err.println ("Error at line: " + lexer.getLineNum() + ": " + strError);
}

No comments:

Post a Comment