[TxMt] language grammar question

Sylvain Benilan s.benilan at claire-language.com
Thu Nov 24 09:55:22 UTC 2005


Le 24 nov. 05 à 01:00, Allan Odgaard a écrit :

> On 23/11/2005, at 14:26, Sylvain Benilan wrote:
>
>> My question is about a language description design. I tried (but  
>> failed) to design the grammar such anything that is a valid CLAIRE  
>> construct is described by a specific pattern and anything else  
>> falls into the scope of 'invalid.illegal.something'. For instance,  
>> in CLAIRE, a variable scope is introduced with a 'let' construct :
>>
>> 	let x := 1, y := 2 in (x + y) // valid
>> 	let x := 1, y := 2 *BAD* in (x + y) // invalid : *BAD* illegal
>>
>> The rule that describe the 'let' construct would look like :
>>
>> 	let <#var-def-list> in <#any>
>>
>> Which can't be described with a begin/end pattern, unless I can  
>> reference a repository rule from whitin the begin/end pattern. Can  
>> we do that ?
>
> It is possible to include a repository rule as one of the sub-rules  
> inside begin/end. But what you want to do is not straightforward.  
> The Property List (Old-Style) does rather strict matching, e.g.  
> it'll allow: ( foo, bar ) as an array, but not: ( foo bar ) or  
> ( foo, , bar ).
>
> The way this is done is by matching everything that is valid in the  
> current context, and then have a catch-all rule last, which matches  
> the leftovers as invalid.
>
> So for example for the let … in part, we could make a rule like this:
>
>    begin = "\blet\b";
>    end = "\bin\b";
>    patterns = (
>       { include = "#variable-declaration"; }, // should match  
> optional trailing comma
>       { match = "\S"; name = "invalid.illegal...."; } // we should  
> never reach this!
>    );
>
> (\S is everything but whitespace)

I tried this already :)
My goal was to catch a the common mistake of inserting a dummy comma  
in the let contruct.
But I may create a high-priority rule that catches "let\s*," or ", 
\s*in"...

> To be really strict though, this can quickly get rather complex.  
> Also keep in mind, that often syntax highlight lose a bit of value,  
> if it doesn't color anything until the complete statement is  
> correct, so being 100% strict is not always an advantage.

This argument sounds particularly valuable!
Thanks for your reply


Sylvain






More information about the textmate mailing list