Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.compilers > #3478 > unrolled thread

flex and bison grouping

Started byArchana Deshmukh <desharchana19@gmail.com>
First post2023-05-18 22:54 -0700
Last post2023-05-27 02:08 +0200
Articles 4 — 3 participants

Back to article view | Back to comp.compilers


Contents

  flex and bison grouping Archana Deshmukh <desharchana19@gmail.com> - 2023-05-18 22:54 -0700
    Re: flex and bison grouping Archana Deshmukh <desharchana19@gmail.com> - 2023-05-24 23:20 -0700
      Re: flex and bison grouping gah4 <gah4@u.washington.edu> - 2023-05-25 17:08 -0700
        Re: flex and bison grouping Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2023-05-27 02:08 +0200

#3478 — flex and bison grouping

FromArchana Deshmukh <desharchana19@gmail.com>
Date2023-05-18 22:54 -0700
Subjectflex and bison grouping
Message-ID<23-05-022@comp.compilers>
Hello,

I would like to parse following line using bison and flex.

Any help / suggestions are most welcome.

efg @main(%data: r[(1, 2, 4, 4), float32], %param_1: or[(2, 1, 5, 5),
float32], %param_2: or[(20), float32], %param_3: or[(5, 2, 5, 5), float32],
%param_4: or[(50), float32], %param_5: or[(50, 80), float32], %param_6:
Tensor[(50), float32], %param_7: or[(10, 50), float32], %param_8: or[(20),
float32]

Best Regards,
Archana Deshmukh
[This looks very straightforward.  The Flex tokens are keywords, numbers,
and punctuation, the bison rules would be a %param or %data expression,
a list of such expressions, and so on.  Is there some particular problem
you are encountering? -John
Cheap plug: there's always my book https://amzn.to/3IrtPFS ]

[toc] | [next] | [standalone]


#3487

FromArchana Deshmukh <desharchana19@gmail.com>
Date2023-05-24 23:20 -0700
Message-ID<23-05-032@comp.compilers>
In reply to#3478
On Saturday, May 20, 2023 at 1:26:09 AM UTC+5:30, Archana Deshmukh wrote:
> Hello,
>
> I would like to parse following line using bison and flex.
>
> Any help / suggestions are most welcome.
>
> efg @main(%data: r[(1, 2, 4, 4), float32], %param_1: or[(2, 1, 5, 5),
> float32], %param_2: or[(20), float32], %param_3: or[(5, 2, 5, 5), float32],
> %param_4: or[(50), float32], %param_5: or[(50, 80), float32], %param_6:
> Tensor[(50), float32], %param_7: or[(10, 50), float32], %param_8: or[(20),
> float32]
>
> Best Regards,
> Archana Deshmukh
> [This looks very straightforward. The Flex tokens are keywords, numbers,
> and punctuation, the bison rules would be a %param or %data expression,
> a list of such expressions, and so on. Is there some particular problem
> you are encountering? -John
> Cheap plug: there's always my book https://amzn.to/3IrtPFS ]


Thanks John for response.
I am able to write flex tokens and bison parser and able to retrieve tokens and values. Now, I want to put these values to a list. I implemented with C linked list
with simple structure
struct node{
        char* name;
        int dimensions[4];
        char* type;
        struct node *next;
};
I am able to populate the list for "name" parameter. The type is also of type char*. How, I can differentiate between parameter "char* name" or "char* type" when I populate list.

The flex code has tokens and bison parser code understands these tokens correctly. Now, I need to put these values to list.  I think I am missing something here. There is no context in bison code.

Best Regards,
Archana Deshmukh
[If it's not obvious from context what kind of nodes are in the list, add a tag field to the
node that tells you what kind of node it is.  For nodes this small it doesn't really
matter, but we often use a union to use the same space for fields that appear in different
kinds of nodes. -John]

[toc] | [prev] | [next] | [standalone]


#3488

Fromgah4 <gah4@u.washington.edu>
Date2023-05-25 17:08 -0700
Message-ID<23-05-033@comp.compilers>
In reply to#3487
On Thursday, May 25, 2023 at 5:49:39 AM UTC-7, Archana Deshmukh wrote:

(snip)

> I am able to write flex tokens and bison parser and able to retrieve tokens
>  and values. Now, I want to put these values to a list. I implemented with C linked list
> with simple structure
> struct node{
> char* name;
> int dimensions[4];
> char* type;
> struct node *next;
> };
> I am able to populate the list for "name" parameter. The type is also of type char*.
> How, I can differentiate between parameter "char* name" or "char* type" when I populate list.

One that you have to be careful about with C in general, and I suspect in this case,
is that you might have a pointer to some buffer that is reused.  Saving the pointer
returned by flex might not help.  (I suspect John will tell me if this is wrong.)

You often need to allocate new space, and make a copy to save.
[You are right -- you need to make a copy of the yytext string in a
flex action if you want to keep it. Otherwise it'll be overwritten the
next time the lexer reads a block of input text. This is a very common
bug. -John]

[toc] | [prev] | [next] | [standalone]


#3489

FromHans-Peter Diettrich <DrDiettrich1@netscape.net>
Date2023-05-27 02:08 +0200
Message-ID<23-05-034@comp.compilers>
In reply to#3488
On 5/26/23 2:08 AM, gah4 wrote:
> On Thursday, May 25, 2023 at 5:49:39 AM UTC-7, Archana Deshmukh wrote:

>> I am able to populate the list for "name" parameter. The type is also of type char*.
>> How, I can differentiate between parameter "char* name" or "char* type" when I populate list.
>
> One that you have to be careful about with C in general, and I suspect in this case,
> is that you might have a pointer to some buffer that is reused.  Saving the pointer
> returned by flex might not help.  (I suspect John will tell me if this is wrong.)
>
> You often need to allocate new space, and make a copy to save.

In a typical compiler strings go into lists of literals and identifiers
(types, variables, functions...). The string has to be stored (copied)
on the first occurence, later occurences mostly become references to the
already existing entry (depending on scope rules).

> [You are right -- you need to make a copy of the yytext string in a
> flex action if you want to keep it. Otherwise it'll be overwritten the
> next time the lexer reads a block of input text. This is a very common
> bug. -John]

DoDi

[toc] | [prev] | [standalone]


Back to top | Article view | comp.compilers


csiph-web