2013-02-21 2 views
0

Я новичок. Я хочу проанализировать файл bibtex с помощью flex/bison. Образец BibTeX является:синтаксический анализ bibtex с bison

@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; 
} 

Проблема заключается в том, что я хочу, чтобы отделить ключ и Вэл в различных переменных и хранить его в некоторое место (может быть массивом). Могу ли я получить некоторое представление?

+0

возможно дубликат [синтаксический BibTex с прогибаетесь + зубрами: Revisited] (http://stackoverflow.com/questions/15305789/parse-bibtex-with-flexbison-revisited) –

ответ

0

Если бы я видел этот вопрос год назад, я бы сделал одновременный комментарий, чтобы вопрос мог быть улучшен. Приведенный код не является синтаксическим анализатором, а регулярными выражениями, закодированными только для flex. Сканирование входного файла для токенов с использованием регулярных выражений является лишь частью построения парсера. Для бизонов не определена грамматика или структура файла бибтекса.

Чтобы отделить ключ и значение val, если бы все, что требовалось, можно было бы сделать гораздо проще с помощью таких инструментов, как awk и sed, а не flex. Единственное, что я хотел бы указать, это то, что валы всегда следуют равному знаку. Kinda облегчает их идентификацию без какого-либо специального синтаксического покрова.

Поскольку у нас нет информации относительно , почему нам нужно разобрать файл с библейским файлом, и конечной целью этого упражнения было трудно понять, какой будет лучший подход.

Edit: Этот вопрос является дубликатом, как OP переспросил его, и он ответил: parse bibtex with flex+bison: revisited

+0

На самом деле меня спрашивает вопрос ... (во-первых, т.е. у этого не было ответа, возможно, из-за моего плохого обрамления проблемы, поэтому пересматривается). Я не могу удалить его ... так как SO не любит удалять ответный вопрос. добавлен закрытый голос. – BaRud