[augeas-devel] need help with learning lense grammar
Joshua Hoblitt
jhoblitt at noao.edu
Tue Aug 23 21:06:25 UTC 2011
I've never really tried to use Augeas before yesterday and I've been
unable to find lenses for the /etc/auto.master and autofs(5) config
files, so I decided to try to write my own.
I've looked at the step by step directions and eventually simplified
things by using pre-existing lenses as examples.
http://augeas.net/page/Creating_a_lens_step_by_step
As a first stab at automaster(5), this is what I've come up with,
although it's not complete:
module Automaster =
autoload xfm
let eol = Util.eol
let comment = Util.comment
let empty = Util.empty
let comma = Sep.comma
let colon = Sep.colon
let sep_spc = Sep.space
let word = /[^,:#\n\t ]+/
let record = [ seq "automap" .
[ label "key" . store word ] . sep_spc .
( [ label "map-type" . store word ] . comma )? .
( [ label "format" . store word ] . colon )? .
( [ label "map" . store word ] . sep_spc )? .
( [ label "options" . store word ] . sep_spc )?
] (* removed eol as I think sep_spc will consume \n *
let lns = ( empty | comment | record ) *
let filter = incl "/etc/auto.master"
let xfm = transform lns filter
There is an error in this grammar in the whitespace handling but it's
not jump out at me.
The error message:
$ augtool --version
augtool 0.9.0 <http://augeas.net/>
Copyright (C) 2009-2010 David Lutterkort
License LGPLv2+: GNU LGPL version 2.1 or later
<http://www.gnu.org/licenses/lgpl-2.1.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David Lutterkort
$ augparse automaster.aug
Syntax error in lens definition
automaster.aug:16.4-22.4:Failed to compile record
automaster.aug:16.19-21.71:exception: ambiguous concatenation
First regexp: /(([^,:#=\n\t ]+))([ \t]+)(((([^,:#=\n\t
]+))(,))?)(((([^,:#=\n\t ]+))(:))?)(((([^,:#=\n\t ]+))([ \t]+))?)/
Second regexp: /((([^,:#=\n\t ]+))([ \t]+))?/
'A A ' can be split into
'A |=|A '
and
'A A |=|'
First lens: automaster.aug:16.19-20.67:
Second lens: automaster.aug:21.24-.71:
So it appears that /[ ]/ can consume a newline in this regex dialect?
What is the proper way to structure this grammar so that whitespace
handling isn't ambiguous?
Thanks,
-Josh
--
More information about the augeas-devel
mailing list