Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Archana Deshmukh Newsgroups: comp.compilers Subject: Re: flex and bison grouping Date: Wed, 24 May 2023 23:20:22 -0700 Organization: Compilers Central Sender: johnl@iecc.com Approved: comp.compilers@iecc.com Message-ID: <23-05-032@comp.compilers> References: <23-05-022@comp.compilers> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="33709"; mail-complaints-to="abuse@iecc.com" Keywords: lex, yacc, design, comment Posted-Date: 25 May 2023 08:47:53 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com In-Reply-To: <23-05-022@comp.compilers> Xref: csiph.com comp.compilers:3487 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]