From 6744bc948d2c37c8e9fcbfe091bbe40c56b3204d Mon Sep 17 00:00:00 2001 From: Navarrop Date: Tue, 27 Sep 2011 16:44:00 +0200 Subject: [PATCH] Revert "Those files should not be in git." This reverts commit 3c0b68147366bc591839aab1cf37c8aeaab63112. --- src/gras/DataDesc/ddt_parse.yy.l | 238 +++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 src/gras/DataDesc/ddt_parse.yy.l diff --git a/src/gras/DataDesc/ddt_parse.yy.l b/src/gras/DataDesc/ddt_parse.yy.l new file mode 100644 index 0000000000..29d029d59a --- /dev/null +++ b/src/gras/DataDesc/ddt_parse.yy.l @@ -0,0 +1,238 @@ +/* DataDesc/ddt_parse -- automatic parsing of data structures */ + +/* Copyright (c) 2004 Arnaud Legrand, Martin Quinson. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +%option noyywrap +%{ +#include "gras/DataDesc/datadesc_private.h" +#include "gras/DataDesc/ddt_parse.yy.h" +#include + YY_BUFFER_STATE gras_ddt_input_buffer; + FILE *gras_ddt_file_to_parse; + + int gras_ddt_parse_line_pos = 1; + int gras_ddt_parse_col_pos = 0; + int gras_ddt_parse_char_pos = 0; + int gras_ddt_parse_tok_num = 0; + const char *definition; + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_ddt_lexer,gras_ddt_parse,"The crude internals of the lexer used for type parsing"); +#define SHOW_WHERE XBT_DEBUG("%d:%d (char #%d): seen '%s'", gras_ddt_parse_line_pos,gras_ddt_parse_col_pos,gras_ddt_parse_char_pos,yytext) +%} + +%x annotate comment foo +space [ \t] +letter [A-Za-z._-] +digit [0-9] + +%% + int comment_caller=0; + int annotate_caller=0; + +"//"[^\n]* + +"/*g"{space}* { /****************** ANNOTATION ************************/ + XBT_DEBUG("Begin annotation"); + annotate_caller = INITIAL; + gras_ddt_parse_char_pos+= strlen(yytext); + gras_ddt_parse_col_pos+= strlen(yytext); + BEGIN(annotate); +} +"/*g"{space}* { /* trim annotation */ + XBT_DEBUG("Begin annotation"); + annotate_caller = foo; + gras_ddt_parse_char_pos+= strlen(yytext); + gras_ddt_parse_col_pos+= strlen(yytext); + BEGIN(annotate); +} + +{space}*"g*/" { + XBT_DEBUG("End annotation"); + gras_ddt_parse_char_pos+= strlen(yytext); + gras_ddt_parse_col_pos+= strlen(yytext); + BEGIN(annotate_caller); +} + +"*/" { + PARSE_ERROR("``/*g'' construct closed by a regular ``*/''"); +} +\n { + PARSE_ERROR("Type annotation cannot spread over several lines"); +} + +.* { /* eat the rest */ + gras_ddt_parse_char_pos+= strlen(yytext); + gras_ddt_parse_col_pos+= strlen(yytext); + return GRAS_DDT_PARSE_TOKEN_ANNOTATE; +} + +"/*[^g]" { /****************** COMMENTS ************************/ + /* constructs like : */ + /*g [string] g*/ + /* are not comments but size annotations */ + comment_caller = INITIAL; + BEGIN(comment); +} + +"/*[^g]" { + comment_caller = foo; + BEGIN(comment); +} + +[^*\n]* { /* eat anything that's not a '*' */ +} +"*"+[^*/\n]* { /* eat up '*'s not followed by '/'s */ +} +\n { + ++gras_ddt_parse_line_pos; + gras_ddt_parse_col_pos=0; + gras_ddt_parse_char_pos++; +} +"*"+"/" { + gras_ddt_parse_char_pos+= strlen(yytext); + gras_ddt_parse_col_pos+= strlen(yytext); + BEGIN(comment_caller); +} + +({letter}|{digit})* { /****************** STATEMENTS ************************/ + gras_ddt_parse_char_pos += strlen(yytext); + gras_ddt_parse_col_pos += strlen(yytext); + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_WORD); +} +"{" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_LA); +} +"}" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_RA); +} +"[" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_LB); +} +"]" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_RB); +} +"(" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_LP); +} +")" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_RP); +} +"*" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_STAR); +} +";" { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_SEMI_COLON); +} +"," { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; + return(GRAS_DDT_PARSE_TOKEN_COLON); +} +"\n" { + gras_ddt_parse_line_pos++; + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos=0; + SHOW_WHERE; +} +. { + gras_ddt_parse_char_pos++; + gras_ddt_parse_col_pos++; + SHOW_WHERE; +} +%% +/* {space}+ { return(TOKEN_SPACE);} */ + +void gras_ddt_parse_dump(void) { + switch(gras_ddt_parse_tok_num) { + case GRAS_DDT_PARSE_TOKEN_LA : {printf("TOKEN_LA ");break;} + case GRAS_DDT_PARSE_TOKEN_RA : {printf("TOKEN_RA ");break;} + case GRAS_DDT_PARSE_TOKEN_WORD : {printf("TOKEN_WORD ");break;} + /* case GRAS_DDT_PARSE_TOKEN_SPACE : {printf("TOKEN_SPACE ");break;}*/ + /* case GRAS_DDT_PARSE_TOKEN_COMMENT : {printf("TOKEN_COMMENT ");break;}*/ + case GRAS_DDT_PARSE_TOKEN_NEWLINE : {printf("TOKEN_NEWLINE\n");return;} + case GRAS_DDT_PARSE_TOKEN_EMPTY : {printf("TOKEN_EMPTY\n");return;} + default : {printf("Unknown token %d\n", gras_ddt_parse_tok_num);return;} + } + printf("-->%s<-- [line %d, pos %d]\n",yytext,gras_ddt_parse_line_pos,gras_ddt_parse_char_pos); + return; +} + +int gras_ddt_parse_lex_n_dump(void) { + gras_ddt_parse_tok_num = gras_ddt_parse_lex(); + /* gras_ddt_parse_char_pos += strlen(yytext);*/ + return(gras_ddt_parse_tok_num); +} + +void gras_ddt_parse_pointer_init(const char *file) { + gras_ddt_file_to_parse = fopen(file,"r"); + gras_ddt_input_buffer = yy_create_buffer( gras_ddt_file_to_parse, 10 ); + yy_switch_to_buffer(gras_ddt_input_buffer); + + gras_ddt_parse_line_pos = 1; + gras_ddt_parse_char_pos = 0; + gras_ddt_parse_col_pos = 0; + gras_ddt_parse_tok_num = 0; +} + +void gras_ddt_parse_pointer_close(void) { + yy_delete_buffer(gras_ddt_input_buffer); + fclose(gras_ddt_file_to_parse); + + gras_ddt_parse_line_pos = 1; + gras_ddt_parse_char_pos = 0; + gras_ddt_parse_tok_num = 0; +} + + +void gras_ddt_parse_pointer_string_init(const char *string_to_parse) { + gras_ddt_input_buffer = yy_scan_string (string_to_parse); + definition = string_to_parse; + yy_switch_to_buffer(gras_ddt_input_buffer); + + gras_ddt_parse_line_pos = 1; + gras_ddt_parse_char_pos = 0; + gras_ddt_parse_tok_num = 0; +} + +void gras_ddt_parse_pointer_string_close(void) { + yy_delete_buffer(gras_ddt_input_buffer); + + gras_ddt_parse_line_pos = 1; + gras_ddt_parse_char_pos = 0; + gras_ddt_parse_tok_num = 0; + + if (0) + yyunput('\0',NULL); /* fake a use of this function to calm gcc down */ +} + +/* Local variables:*/ +/* mode: c */ +/* End: */ -- 2.30.2