2013-02-21 53 views
0

我是新手。我想用flex/bison解析bibtex文件。樣本 中文提供是:用bison解析bibtex

@Book{a1, 
author="amook", 
Title="ASR", 
Publisher="oxf", 
Year="2010", 
Add="UK", 
Edition="1", 
} 
@Article{a2, 
Author="Rudra Banerjee", 
Title={FeNiMo}, 
Publisher={P{\"R}B}, 
Issue="12", 
Page="36690", 
Year="2011", 
Add="UK", 
Edition="1", 
} 

和解析這個我寫了下面的代碼:

%{ 
#include <stdio.h> 
#include <stdlib.h> 
%} 

%{ 
char yylval; 
int YEAR,i; 
//char array_author[1000]; 
%} 
%x author 
%x title 
%x pub 
%x year 
%% 
@                               printf("\nNEWENTRY\n"); 
[a-zA-Z][a-zA-Z0-9]*            {printf("%s",yytext); 
                                        BEGIN(INITIAL);} 
author=                         {BEGIN(author);} 
<author>\"[a-zA-Z\/.]+\"        {printf("%s",yytext); 
                                        BEGIN(INITIAL);} 
year=                           {BEGIN(year);} 
<year>\"[0-9]+\"                {printf("%s",yytext); 
                                        BEGIN(INITIAL);} 
title=                          {BEGIN(title);} 
<title>\"[a-zA-Z\/.]+\"         {printf("%s",yytext); 
                                        BEGIN(INITIAL);} 
publisher=                      {BEGIN(pub);} 
<pub>\"[a-zA-Z\/.]+\"           {printf("%s",yytext); 
                                        BEGIN(INITIAL);} 
[a-zA-Z0-9\/.-]+=        printf("ENTRY TYPE "); 
\"                      printf("QUOTE "); 
\{                      printf("LCB "); 
\}                      printf(" RCB"); 
;                       printf("SEMICOLON "); 
\n                      printf("\n"); 
%% 

int main(){ 
  yylex(); 
//char array_author[1000]; 
//printf("%d%s",&i,array_author[i]); 
i++; 
return 0; 
} 

的問題是,我想分開在不同的 變量鍵和val並將其存儲在一些地方(可能是陣列)。 我可以有一些見解嗎?

+0

可能重複(http://stackoverflow.com/questions/15305789/parse-bibtex-with-flexbison-revisited) – 2015-02-28 09:49:40

回答

0

如果一年前我看過這個問題,我會提出一個同時期的評論,這樣可以改進問題。提供的代碼不是解析器,而是正則表達式僅爲flex編碼。使用正則表達式掃描令牌的輸入文件只是構建解析器的一部分。沒有爲bison定義bibtex文件的語法或結構。

要分離鍵和val,如果這些都是必需的,可以用awk和sed之類的工具比flex更容易。我指出的一點是,vals總是遵循等號。有點讓他們很容易識別,沒有任何特別的句法jiggery pokery。

因爲我們沒有信息爲爲什麼我們需要解析中文提供文件,並實行了艱苦的最終目標,看看什麼是最好的辦法。

編輯:這個問題是一個重複,因爲OP再次問它,它回答:parse bibtex with flex+bison: revisited

[解析使用Flex +野牛中文提供:重訪]的
+0

其實這兩個問題都是由我問的....(第一,也就是說這個問題沒有答案,可能是由於我的問題構思不好,因此重新討論)。我無法刪除它...因爲不喜歡刪除已回答的問題。近距離投票加入。 – BaRud 2015-02-28 11:35:12