help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: SMIE examples or guides


From: Stefan Monnier
Subject: Re: SMIE examples or guides
Date: Thu, 30 Jun 2016 03:23:08 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)

> I got it to work almost by experimenting with your suggestions. But it
> appears to do some kind of automatic aligning I don't want:
>
> HELLO   one
>         two
>         three
>     BYE

If one, two, and three are an arbitrary sequence of <...> bracketed by
HELLO and BYE, then the above looks like the proper indentation to me.

> That should instead have been:
>
> HELLO   one
>     two
>     three
>     BYE

The indentation here looks wrong to me unless "one" is special in the
sense that it's some kind of argument to HELLO and "two" and "three" are
an arbitrary sequence of <...> bracketed by "HELLO <something>" and "BYE".

Which is it?  And if it's the latter, how do you distinguish the
separation between "one" and "two" (e.g. can the first line be something
like "HELLO one two" where the "one two" is the argument to HELLO, and
if so, how can you distinguish this case from the case where we have
"HELLO one" and the subsequent "two" is part of the inner sequence)?


        Stefan


> 2016-06-29 9:37 GMT+02:00 Stefan Monnier <address@hidden>:
>>> HELLO
>>> HELLO foo BYE
>>> HELLO
>>> bla
>>> net
>>> neat
>>> BYE
>>> text more
>>> more
>>> BYE
>> 
>> That's expected: the third HELLO...BYE is indented as an argument of
>> the first.  Similarly to:
>> 
>> (table->method)
>> (arg1,
>> arg2
>> )
>> 
>> [ Read the above, thinking that "(" is like HELLO and ")" is like
>> "BYE".  ]
>> 
>> Similarly, "net" and "neat" are treated as arguments to "bla".
>> 
>> A quick fix to that part would be to add an indentation rule along the
>> lines of
>> 
>> (`(:elem . arg) 0)
>> 
>> or alternatively
>> 
>> (`(:list-intro . ,_) t)
>> 
>> Tho, if your language makes newlines significant (i.e. "bla\nnet" is not
>> equivalent to "bla net"), then you might be better off changing the
>> tokenizer (by providing appropriate :forward-token and :backward-token
>> arguments to `smie-setup') so as to return an actual token for every
>> newline encountered, after which you can add corresponding rules to
>> the grammar.
>> 
>>> HELLO
>>> bla
>>> net
>>> neat
>>> BYE
>> 
>> To get the BYE indented this way, a quick-fix could be to add a rule
>> like
>> 
>> (`(:before . "BYE") 4)
>> 
>> 
>> -- Stefan
>> 
>> 


> -- 
> mvh/best regards Björn Lindqvist



reply via email to

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