首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bison解析bibtex

使用bison解析bibtex
EN

Stack Overflow用户
提问于 2013-02-22 01:22:54
回答 1查看 173关注 0票数 0

我是个新手。我想使用flex/bison解析bibtex文件。一个示例bibtex是:

代码语言:javascript
复制
@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",
}

为了解析它,我编写了以下代码:

代码语言:javascript
复制
%{
#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;
}

问题是,我希望在不同的变量中分离key和val,并将其存储在某个位置(可能是数组)。我可以有一些见解吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 07:04:48

如果我在一年前看到了这个问题,我会在同一时间发表评论,这样这个问题就可以得到改进。提供的代码不是解析器,而是仅为flex编写的正则表达式。使用正则表达式扫描输入文件中的令牌只是构建解析器的一部分。尚未为bison定义bibtex文件的语法或结构。

要分离key和val,使用awk和sed等工具要比使用flex容易得多。我要指出的一件事是,数字总是跟在等号后面。这使得它们很容易识别,而不需要任何特殊的语法摆设。

由于我们没有关于为什么需要解析bibtex文件的信息,而且这个练习的最终目标很难看出什么是最好的方法。

编辑:这个问题是重复的,因为操作员再次询问并得到了回答:parse bibtex with flex+bison: revisited

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15008495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档