Re: Mini-C example

Frank Hein <[email protected]>
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <OF0F316FBD.5FBABA24-ONC1258004.005C9E51-C1258004.005CB697@maxence.de>
Florian Klemme <[email protected]> wrote on 03.08.2016 18:37:06:

> From: Florian Klemme <[email protected]>
> To: [email protected], 
> Date: 03.08.2016 18:38
> Subject: Re: [Spirit-general] Mini-C example
> 
> Oh, right. I haven't seen the declaration of "body" in function.hpp 
> and thought it would be a member inherited from qi::grammar.
> This makes sense, thanks a lot! :-)
> Florian

You're welcome. Happy refactoring. :)

> 
> On 03.08.2016 18:27, Frank Hein wrote:
> Florian Klemme <[email protected]> wrote on 03.08.2016 17:34:21:
> 

> From: Florian Klemme <[email protected]>
> To: [email protected], 
> Date: 03.08.2016 17:36
> Subject: [Spirit-general] Mini-C example
> 
> On 03.08.2016 01:59, Frank Hein wrote:
> Regarding your compiler implementation did you examine the mini-c 
> example provided with qi? Inspiring. 
> Oh, it is! I haven't seen it before. I see, there is a lot of 
> refactorization for me to do. ;-) 

> 
> 

> I've seen that Joel uses multiple grammars to parse the source, but 
> I can only find the instantiation of the function-parser in main(). 

> 
> You can understand grammars as a container for rules. You can use them
> to give some structure (by topic, for example) to your rule set. 
> 
> A grammar is also a nonterminal parser. When you define a grammer, you
> provide a start rule, which is one of the rules defined within the 
> grammar.
> 
> That's not all about grammars but enough to get a basic understanding.
> 
> If you phrase_parse an input with a grammar provided as parser, then qi 
> applies
> the rules defined in the grammer starting with the defined start rule. 
> This
> may depend on other rules. 
> 
> 

> Where are the others instantiated? Or how does this chain of grammars 

> work?

> Also, what does this "body" member do?
>     template <typename Iterator>
>     function<Iterator>::function(error_handler<Iterator>& error_handler)
>       : function::base_type(start), body(error_handler)

> 
> Above function::base_type(start) makes the rule named 'start' the start 
> rule
> of the grammar 'function'.
> 
> So if you would phrase_parse( x,y, function, skipper) rule evalution 
> starts
> at the 'start' rule.
> 

> name =
>                 !body.expr.keywords
>             >>  raw[lexeme[(alpha | '_') >> *(alnum | '_')]]
>             ;

> 
> You can even make a grammar known from another grammar. Take a look at
> the declaration of body. It's statement<Iterator> body. This is the 
> statement
> grammar declared in statement.hpp. The statement grammar again has a 
> member, which is
> the expression grammar. 
> 
> That way the mini-c grammars have a top-down knowledge of each other. In 

> main only the 
> top level grammar is explicitly, the others are instantiated as a (chain 

> of) members of
> the outer grammar.
> 
> Regards, Frank
> 
> 

> Florian
> 

> 
------------------------------------------------------------------------------

> _______________________________________________
> Spirit-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/spirit-general
> 

> 
------------------------------------------------------------------------------

> 

> _______________________________________________
> Spirit-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/spirit-general

> 
------------------------------------------------------------------------------
> _______________________________________________
> Spirit-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/spirit-general

------------------------------------------------------------------------------

_______________________________________________
Spirit-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spirit-general
smime.p7s (application/pkcs7-signature, 5.1 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.