2016-12-21 1 views
0

LinuxシステムでFlexユーティリティを使用してHTMLテーブルコードをプレーンテキストに変換する必要があります。
私は次のようにしている私の.lexファイルのトークンのリストを作ってみた:
LexとYaccを使用してHTMLテーブルをプレーンテキストに変換する

OPENTABLE  <table> 
    CLOSETABLE  </table> 
    OPENROW   <tr> 
    CLOSEROW  </tr> 
    OPENHEADING  <th> 
    CLOSEHEADING </th> 
    OPENDATA  <td> 
    CLOSEDATA  </td> 
    STRING   [0-9a-zA-Z]* 
    %% 
    %% 

HTMLの解析のための私のCGFは(翻訳スキームが含まれている)のようになります。

TABLE  --> OPENTABLE ROWLIST CLOSETABLE ; 
    ROWLIST --> ROWLIST ROW |^    ; 
    ROW  --> OPENROW DATALIST CLOSEROW  printf("\n"); 
    DATALIST --> DATALIST DATA |^    ; 
    DATA  --> OPENDATA STRIN CLOSEDATA  printf(yytext+"\t"); 

いくつかの例を見てきましたが、私の.lexファイルのルールセクションに何を書き込むべきかが分かりません。

答えて

0

私は基本的に時間を費やして、それを理解しました。 Flexの情報ページは非常に役に立ちました。これが必要なファイルです。うまく動作しますが、改善が必要です。

%{ 
#include <string.h> 
char *substring(char* str) 
    { 
     int i = 0; 
     int l = strlen(str); 
     char *str2; 
     str2 = malloc(l+1); 
     for (i=4; i < l-5;i++) 
     { 
      str2[i-4] = str[i]; 
     } 
     return str2; 
    } 
%} 
OPENTABLE "<table>" 
CLOSETABLE "</table>" 
OPENROW "<tr>" 
CLOSEROW "</tr>" 
OPENHEADING "<th>" 
CLOSEHEADING "</th>" 
OPENDATA "<td>" 
CLOSEDATA "</td>" 
STRING [a-zA-Z0-9]* 
%% 
{OPENDATA}.{STRING}.{CLOSEDATA} printf("%s\t", substring(yytext)); 
{OPENHEADING}.{STRING}.{CLOSEHEADING} printf("%s\t", substring(yytext)); 
{CLOSEROW} printf("\n"); 
. ; 
[ \n\t] ; 
%% 
int main(int argc, char** argv) 
{ 
    ++argv, --argc; 
    yyin = fopen(argv[0], "r"); 
    yylex(); 
} 
関連する問題