[augeas-devel] Inexpressible Language

Raphaël Pinson raphael.pinson at camptocamp.com
Thu Jun 26 21:36:48 UTC 2014


Now on top of that, you could use lens_ctype to avoid repeating code:

=============================
(* foo.aug *)
module Foo =

let empty = Util.empty_generic Rx.opt_space

let value = [ seq "value" . Sep.colon . store /[^] \t\n:]+/ ]

let entry_base = Util.indent . Util.del_str "["
               . key /[A-Z_]+/ . counter "value" . value+
               . Util.del_str "]"

let comment =
     let entry_rx = lens_ctype entry_base . /.*/
  in [ Util.indent . label "#comment"
     . store (Rx.space_in - entry_rx) . Util.eol ]

let entry = [ entry_base . (comment | Util.eol) ]

let lns = (empty|comment|entry)*


let conf = "Change this to turn sound off.

[SOUND:YES]
[FONT:curses_640x300.png]
[RESIZABLE:YES]You may disable window resizing if you wish.

[PRINT_MODE:2D]
    Mode examples:
[SINGLE_BUFFER:NO]
[EMBARK_RECTANGLE:4:4]

Change these numbers to set the default weights for traffic designations.
 If you make the last numbers too large, pathfinding might lag.
The format is (PATH_COST:<high>:<normal>:<low>:<restricted>).
[PATH_COST:1:2:5:25][SOME_COMMENT: ]

[A_COMMENT:]\n"

test lns get conf = ?
=============================



On Thu, Jun 26, 2014 at 7:38 PM, Raphaël Pinson <
raphael.pinson at camptocamp.com> wrote:

> I see. How about:
>
> =============================
> (* foo.aug *)
> module Foo =
>
> let eol = del /[ \t]*\n/ "\n"
>
> let empty = [ del /[ \t]*\n/ "\n" ]
>
> let comment =
>      let entry_rx = /\[[A-Z_]+:[ \t]*[^]\n \t]+\].*/
>   in let space_in = /[^ \r\t\n].*[^ \r\t\n]|[^ \t\n\r]/
>   in [ Util.indent . label "#comment" . store (space_in - entry_rx) . eol ]
>
> let entry =
>    let value = [ seq "value" . Sep.colon . store /[^] \t\n:]+/ ]
>    in [ Util.indent . Util.del_str "["
>       . key /[A-Z_]+/ . counter "value" . value+
>       . Util.del_str "]" . (comment|eol) ]
>
> let lns = (empty|comment|entry)*
>
>
> let conf = "Change this to turn sound off.
>
> [SOUND:YES]
> [FONT:curses_640x300.png]
> [RESIZABLE:YES]You may disable window resizing if you wish.
>
> [PRINT_MODE:2D]
>     Mode examples:
> [SINGLE_BUFFER:NO]
> [EMBARK_RECTANGLE:4:4]
>
> Change these numbers to set the default weights for traffic designations.
>  If you make the last numbers too large, pathfinding might lag.
> The format is (PATH_COST:<high>:<normal>:<low>:<restricted>).
> [PATH_COST:1:2:5:25][SOME_COMMENT: ]
>
> [A_COMMENT:]\n"
>
> test lns get conf = ?
> =============================
> Test result: foo.aug:38.0-.21:
>   { "#comment" = "Change this to turn sound off." }
>   {  }
>   { "SOUND"
>     { "1" = "YES" }
>   }
>   { "FONT"
>     { "1" = "curses_640x300.png" }
>   }
>   { "RESIZABLE"
>     { "1" = "YES" }
>     { "#comment" = "You may disable window resizing if you wish." }
>   }
>   {  }
>   { "PRINT_MODE"
>     { "1" = "2D" }
>   }
>   { "#comment" = "Mode examples:" }
>   { "SINGLE_BUFFER"
>     { "1" = "NO" }
>   }
>   { "EMBARK_RECTANGLE"
>     { "1" = "4" }
>     { "2" = "4" }
>   }
>   {  }
>   { "#comment" = "Change these numbers to set the default weights for
> traffic designations.  If you make the last numbers too large, pathfinding
> might lag." }
>   { "#comment" = "The format is
> (PATH_COST:<high>:<normal>:<low>:<restricted>)." }
>   { "PATH_COST"
>     { "1" = "1" }
>     { "2" = "2" }
>     { "3" = "5" }
>     { "4" = "25" }
>     { "#comment" = "[SOME_COMMENT: ]" }
>   }
>   {  }
>   { "#comment" = "[A_COMMENT:]" }
> =============================
>
>
>
> On Thu, Jun 26, 2014 at 5:59 PM, Yclept Nemo <orbisvicis at gmail.com> wrote:
>
>> On Thu, Jun 26, 2014 at 2:46 AM, Raphaël Pinson <
>> raphael.pinson at camptocamp.com> wrote:
>>
>>> Hello,
>>>
>>>
>>> I'm not sure if you're reporting a bug (in which case it would help to
>>> file it on the bugtracker [0]) or asking for help. I'll suppose the latter.
>>>
>>> Here is a lens that parses your example. I suppose there must still be
>>> an issue (which is linked to the restrictions I had to put in the comment
>>> regexp —no "[" allowed as first character— but your example doesn't expose
>>> it then:
>>>
>>
>> Hi,
>>
>> You're right - there are additional restrictions which I failed to
>> demonstrate in the unit test, though I expressed them in the lenses (which
>> compared from you examples had other shortcomings, ie not resetting the
>> counter).
>>
>> let comments="
>> [A_COMMENT:   ] <-- this is a comment
>> [NOT_A_COMMENT: 5 : 6 ][A_COMMENT:  ] <--- only the last [] is a comment
>> "
>>
>> Since this is my first lens (just started using Augeas) I was seeking
>> confirmation that this particular grammar is very difficult to express in
>> Augeas, and if so hoping to prompt further development by some suggestions.
>> I had just opened a github issue (#138, [1]) after posting this thread,
>> with alternative solutions in addition to the original proposal of greedy
>> operators.
>>
>> For the record, I believe this is a common problem parsers face,
>> (dangling-else, [2]), something parsing expression grammars [3] do not
>> suffer, which can be solved, among other strategies, by "maximal munch"
>> (greedy) [4].
>>
>>
>>
>> [1] https://github.com/hercules-team/augeas/issues/138
>>
>> [2] http://en.wikipedia.org/wiki/Ambiguous_grammar#Dangling_else
>> [3]
>> http://stackoverflow.com/questions/1044600/difference-between-an-ll-and-recursive-descent-parser
>> [4] http://en.wikipedia.org/wiki/Maximal_munch
>>
>>
>
>
> --
> Raphaël Pinson
> Infrastructure Developer & Trainer
> +33 479 26 57 93
> +33 781 90 00 79
>
> Camptocamp France
> Savoie Technolac
> BP 352
> 48, avenue du Lac du Bourget
> 73372 Le Bourget du Lac, Cedex
> www.camptocamp.com
>



-- 
Raphaël Pinson
Infrastructure Developer & Trainer
+33 479 26 57 93
+33 781 90 00 79

Camptocamp France
Savoie Technolac
BP 352
48, avenue du Lac du Bourget
73372 Le Bourget du Lac, Cedex
www.camptocamp.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20140626/9e150924/attachment.htm>


More information about the augeas-devel mailing list