lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Grammar: meaning of terminals


From: Harmath Dénes
Subject: Re: Grammar: meaning of terminals
Date: Mon, 8 Mar 2010 21:08:22 +0100

Thanks for the clarification, now it is much clearer!

thSoft

On 2010.03.08., at 11:03, Bertalan Fodor (LilyPondTool) wrote:

> The lexer reads regular expressions, and tries to match them to a rule. A 
> rule will return a token and a value (yylval). These two will be used by the 
> parser to interpret the input.
> This is so simple.
> So for example how a note name is recognized:
> a note name like fs will be read as [a-zA-Z\200-\377]+ regular expression 
> (ALPHAWORD in lexer.ll).
> In notes and figure lexer state (<notes, figures> in lexer.ll) it will return 
> scan_bare_word, based on the rule:
> <notes,figures>{
>     {ALPHAWORD}    {
>         return scan_bare_word (YYText ());
>     }
>  
> 
> scan_bare_word is a function that takes the matched input and return the 
> appropriate token and set the appropriate value in yylval. Look at the 
> implementation of this function to understand how that token is actually 
> generated.
> 
> Bert
> 
> 
> 
> Harmath Dénes wrote:
>> On 2010.03.04., at 19:36, Patrick McCarty wrote:
>> 
>>   
>> 
>>> 2010/3/4 Harmath Dénes <address@hidden>
>>> :
>>>     
>>> 
>>>> Greetings all,
>>>> 
>>>> it's great to have a grammar of LilyPond in the NR! But there are terminal 
>>>> rules which are not strings (BOOK_IDENTIFIER, CHORD_MODIFIER etc.). Where 
>>>> can their definitions be learned?
>>>>       
>>>> 
>>> If you do a `git grep' for them in the source tree, you will see that
>>> many of these terminals come to life in the lexing stage.
>>>     
>>> 
>> 
>> I see. The -p option gives even more useful output.
>> 
>>   
>> 
>>> For example, BOOK_IDENTIFIER is the return value of
>>> Lily_lexer::try_special_identifiers() in lily/parser.yy, but only if
>>> its second argument is a Book smob.
>>> 
>>> -Patrick
>>>     
>>> 
>> 
>> It's not exactly clear to me how lexing and parsing are related, since there 
>> are lexer rules (e.g. NOTENAME_PITCH) which can be set from Scheme code. 
>> Could someone shed a light on this?
>> 
>> Thanks,
>> thSoft
>> 
>> _______________________________________________
>> lilypond-devel mailing list
>> 
>> address@hidden
>> http://lists.gnu.org/mailman/listinfo/lilypond-devel
>> 
>> 
>>   
>> 
> 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]