diff --git a/doc/samples/bamana.gram.txt b/doc/samples/bamana.gram.txt
index 7de06d1..d0afc90 100644
--- a/doc/samples/bamana.gram.txt
+++ b/doc/samples/bamana.gram.txt
@@ -41,111 +41,111 @@ return if parsed
section inflection
# verbal inflection
# -la/-na PROG
-pattern :v: [ {@nasal-v@|na}:: ] | :v: [:v: :mrph:PROG]
-pattern :v: [ {@nonnasal-v@|la}:: ] | :v: [:v: :mrph:PROG]
+pattern :v: [{@nasal-v@|na}::] | :v: [:v: :mrph:PROG]
+pattern :v: [{@nonnasal-v@|la}::] | :v: [:v: :mrph:PROG]
# moved up from v_vq_derivation because of na/la ambiguity
-pattern :n: [ {@smth-nasal@|na}:: ] | :n: [ :v: :mrph:AG.PRM]
-pattern :n: [ {@nonnasal-v@|la}:: ] | :n: [ :v: :mrph:AG.PRM]
+pattern :n: [{@smth-nasal@|na}::] | :n: [:v: :mrph:AG.PRM]
+pattern :n: [{@nonnasal-v@|la}::] | :n: [:v: :mrph:AG.PRM]
# -ra/-la/-na PFV.INTR
-pattern :v: [ {@nasal-syl@|n[a']}:: ] | :v: [:v: :mrph:PFV.INTR]
-pattern :v: [ {@glide-syl@|l[a']}:: ] | :v: [:v: :mrph:PFV.INTR]
-pattern :v: [ {@nonnasalglide-syl@|r[a']}:: ] | :v: [:v: :mrph:PFV.INTR]
+pattern :v: [{@nasal-syl@|n[a']}::] | :v: [:v: :mrph:PFV.INTR]
+pattern :v: [{@glide-syl@|l[a']}::] | :v: [:v: :mrph:PFV.INTR]
+pattern :v: [{@nonnasalglide-syl@|r[a']}::] | :v: [:v: :mrph:PFV.INTR]
# nominal inflection
# -w PL
-pattern :n/adj/dtm/prn/ptcp/n.prop/num: [ {|w}:: ] | :n/adj/dtm/prn/ptcp/n.prop/num: [:n/adj/dtm/prn/ptcp/n.prop/num: :mrph:PL]
+pattern :n/adj/dtm/prn/ptcp/n.prop/num: [{|w}::] | :n/adj/dtm/prn/ptcp/n.prop/num: [:n/adj/dtm/prn/ptcp/n.prop/num: :mrph:PL]
# participles
section participles
-pattern :v/ptcp: [ {|bali}:: ] | :ptcp: [ :v: :mrph:PTCP.PRIV]
-pattern :v/ptcp: [ {|ta}:: ] | :ptcp: [ :v: :mrph:PTCP.POT]
-pattern :v/ptcp: [ {|tɔ}:: ] | :ptcp: [ :v: :mrph:CONV.PROG]
-pattern :v/ptcp: [ {@smth-nasal@|nen}:: ] | :ptcp: [ :v: :mrph:PTCP.RES]
-pattern :v/ptcp: [ {@nonnasal-v@|len}:: ] | :ptcp: [ :v: :mrph:PTCP.RES]
+pattern :v/ptcp: [{|bali}::] | :ptcp: [:v: :mrph:PTCP.PRIV]
+pattern :v/ptcp: [{|ta}::] | :ptcp: [:v: :mrph:PTCP.POT]
+pattern :v/ptcp: [{|tɔ}::] | :ptcp: [:v: :mrph:CONV.PROG]
+pattern :v/ptcp: [{@smth-nasal@|nen}::] | :ptcp: [:v: :mrph:PTCP.RES]
+pattern :v/ptcp: [{@nonnasal-v@|len}::] | :ptcp: [:v: :mrph:PTCP.RES]
-pattern :v/ptcp: [ {@smth-nasal@|nen|ba}:: ] | :ptcp: [ :v: :mrph:PTCP.RES :mrph:AUGM]
-pattern :v/ptcp: [ {@nonnasal-v@|len|ba}:: ] | :ptcp: [ :v: :mrph:PTCP.RES :mrph:AUGM]
+pattern :v/ptcp: [{@smth-nasal@|nen|ba}::] | :ptcp: [:v: :mrph:PTCP.RES :mrph:AUGM]
+pattern :v/ptcp: [{@nonnasal-v@|len|ba}::] | :ptcp: [:v: :mrph:PTCP.RES :mrph:AUGM]
# derivative forms we need to consider even if we have them in dictionary
section common_derivation
-pattern :ptcp/n/adj: [ {|nin}:: ] | :ptcp/n/adj: [:ptcp/n/adj: :mrph:DIM]
-pattern :n/adj/ptcp/v: [ {|ya}:: ] | :n: [:n/adj/ptcp/v: :mrph:ABSTR]
-pattern :ptcp/n/adj: [ {|ba}:: ] | :ptcp/n/adj: [:ptcp/n/adj: :mrph:AUGM]
+pattern :ptcp/n/adj: [{|nin}::] | :ptcp/n/adj: [:ptcp/n/adj: :mrph:DIM]
+pattern :n/adj/ptcp/v: [{|ya}::] | :n: [:n/adj/ptcp/v: :mrph:ABSTR]
+pattern :ptcp/n/adj: [{|ba}::] | :ptcp/n/adj: [:ptcp/n/adj: :mrph:AUGM]
# to handle -baliya ex: basigi.bali.ya
-pattern :v/ptcp/n/adj: [ {|bali|ya}:: ] | :n: [:v/ptcp: :mrph:PTCP.PRIV :mrph:ABSTR]
+pattern :v/ptcp/n/adj: [{|bali|ya}::] | :n: [:v/ptcp: :mrph:PTCP.PRIV :mrph:ABSTR]
# common nominal/verbal derivation (locatives)
section n_v_derivation
-pattern :n/n.prop: [ {|ka}:: ] | :n/n.prop: [:n/n.prop: :mrph:GENT]
-pattern :n/n.prop: [ {@nasal-v@|na}:: ] | :n/n.prop: [:n/n.prop: :mrph:LOC]
-pattern :n/n.prop: [ {@nonnasal-v@|la}:: ] | :n/n.prop: [:n/n.prop: :mrph:LOC]
+pattern :n/n.prop: [{|ka}::] | :n/n.prop: [:n/n.prop: :mrph:GENT]
+pattern :n/n.prop: [{@nasal-v@|na}::] | :n/n.prop: [:n/n.prop: :mrph:LOC]
+pattern :n/n.prop: [{@nonnasal-v@|la}::] | :n/n.prop: [:n/n.prop: :mrph:LOC]
# nominal derivation
section n_derivation
-pattern :n: [ {@smth-nasal@|nama}:: ] | :n: [ :n: :mrph:STAT]
-pattern :n: [ {@nonnasal-v@|lama}:: ] | :n: [ :n: :mrph:STAT]
-pattern :n: [ {|ma}:: ] | :n: [ :n: :mrph:COM]
-pattern :adj/n: [ {|ntan}:: ] | :adj/n: [ :n: :mrph:PRIV]
-pattern :adj/n: [ {|bagatɔ}:: ] | :adj/n: [ :n: :mrph:ST]
-pattern :adj/n: [ {|baatɔ}:: ] | :adj/n: [ :n: :mrph:ST]
-pattern :n: [ {ɲɔgɔn|}:: ] | :n: [ :prn:RECP :n: ]
-pattern :n: [ {|ɲwaa?n}:: ] | :n: [ :n: :prn:RECP]
+pattern :n: [{@smth-nasal@|nama}::] | :n: [:n: :mrph:STAT]
+pattern :n: [{@nonnasal-v@|lama}::] | :n: [:n: :mrph:STAT]
+pattern :n: [{|ma}::] | :n: [:n: :mrph:COM]
+pattern :adj/n: [{|ntan}::] | :adj/n: [:n: :mrph:PRIV]
+pattern :adj/n: [{|bagatɔ}::] | :adj/n: [:n: :mrph:ST]
+pattern :adj/n: [{|baatɔ}::] | :adj/n: [:n: :mrph:ST]
+pattern :n: [{ɲɔgɔn|}::] | :n: [:prn:RECP :n:]
+pattern :n: [{|ɲwaa?n}::] | :n: [:n: :prn:RECP]
# verbal/vq derivation
section v_vq_derivation
-pattern :n: [ {@smth-nasal@|nan}:: ] | :n: [ :v: :mrph:INSTR]
-pattern :n: [ {@nonnasal-v@|lan}:: ] | :n: [ :v: :mrph:INSTR]
-pattern :n: [ {@smth-nasal@|ni}:: ] | :n: [ :v: :mrph:NMLZ]
-pattern :n: [ {@nonnasal-v@|li}:: ] | :n: [ :v: :mrph:NMLZ]
-pattern :n: [ {|baga}:: ] | :n: [ :v: :mrph:AG.OCC]
-pattern :n: [ {|baa}:: ] | :n: [ :v: :mrph:AG.OCC]
-pattern :n: [ {|baga|nci}:: ] | :n: [ :v: :mrph:AG.OCC :mrph:AG.EX]
-pattern :n: [ {|baa|nci}:: ] | :n: [ :v: :mrph:AG.OCC :mrph:AG.EX]
+pattern :n: [{@smth-nasal@|nan}::] | :n: [:v: :mrph:INSTR]
+pattern :n: [{@nonnasal-v@|lan}::] | :n: [:v: :mrph:INSTR]
+pattern :n: [{@smth-nasal@|ni}::] | :n: [:v: :mrph:NMLZ]
+pattern :n: [{@nonnasal-v@|li}::] | :n: [:v: :mrph:NMLZ]
+pattern :n: [{|baga}::] | :n: [:v: :mrph:AG.OCC]
+pattern :n: [{|baa}::] | :n: [:v: :mrph:AG.OCC]
+pattern :n: [{|baga|nci}::] | :n: [:v: :mrph:AG.OCC :mrph:AG.EX]
+pattern :n: [{|baa|nci}::] | :n: [:v: :mrph:AG.OCC :mrph:AG.EX]
# attempt to handle -likɛ, -likɛla, others like -liwari...
-pattern :v: [ {@nonnasal-v@|li|kɛ}:: ] | :v: [ :v: :mrph:NMLZ kɛ́:v:faire]
-pattern :n: [ {@nonnasal-v@|li|kɛ|la}:: ] | :n: [ :v: :mrph:NMLZ kɛ́:v:faire :mrph:AG.PRM]
-pattern :v: [ {@smth-nasal@|ni|kɛ}:: ] | :v: [ :v: :mrph:NMLZ kɛ́:v:faire]
-pattern :n: [ {@smth-nasal@|ni|kɛ|la}:: ] | :n: [ :v: :mrph:NMLZ kɛ́:v:faire :mrph:AG.PRM]
-pattern :n: [ {@nonnasal-v@|li|wari}:: ] | :n: [ :v: :mrph:NMLZ :n:]
-pattern :n: [ {@smth-nasal@|ni|wari}:: ] | :n: [ :v: :mrph:NMLZ :n:]
-pattern :n: [ {@nonnasal-v@|li|fɛn}:: ] | :n: [ :v: :mrph:NMLZ fɛ́n:n:chose]
-pattern :n: [ {@smth-nasal@|ni|fɛn}:: ] | :n: [ :v: :mrph:NMLZ fɛ́n:n:chose]
-pattern :n: [ {@nonnasal-v@|li|ko}:: ] | :n: [ :v: :mrph:NMLZ kó:n:affaire]
-pattern :n: [ {@smth-nasal@|ni|ko}:: ] | :n: [ :v: :mrph:NMLZ kó:n:affaire]
+pattern :v: [{@nonnasal-v@|li|kɛ}::] | :v: [:v: :mrph:NMLZ kɛ́:v:faire]
+pattern :n: [{@nonnasal-v@|li|kɛ|la}::] | :n: [:v: :mrph:NMLZ kɛ́:v:faire :mrph:AG.PRM]
+pattern :v: [{@smth-nasal@|ni|kɛ}::] | :v: [:v: :mrph:NMLZ kɛ́:v:faire]
+pattern :n: [{@smth-nasal@|ni|kɛ|la}::] | :n: [:v: :mrph:NMLZ kɛ́:v:faire :mrph:AG.PRM]
+pattern :n: [{@nonnasal-v@|li|wari}::] | :n: [:v: :mrph:NMLZ :n:]
+pattern :n: [{@smth-nasal@|ni|wari}::] | :n: [:v: :mrph:NMLZ :n:]
+pattern :n: [{@nonnasal-v@|li|fɛn}::] | :n: [:v: :mrph:NMLZ fɛ́n:n:chose]
+pattern :n: [{@smth-nasal@|ni|fɛn}::] | :n: [:v: :mrph:NMLZ fɛ́n:n:chose]
+pattern :n: [{@nonnasal-v@|li|ko}::] | :n: [:v: :mrph:NMLZ kó:n:affaire]
+pattern :n: [{@smth-nasal@|ni|ko}::] | :n: [:v: :mrph:NMLZ kó:n:affaire]
# need to handle -ba AUGM inside ex: ko.jugu.ba.kɛ.la
-pattern :n: [ {|ɲɔgɔn}:: ] | :n: [ :v: :prn:RECP]
-pattern :n: [ {|ɲwaa?n}:: ] | :n: [ :v: :prn:RECP]
-pattern :n: [ {ɲɔgɔn|}:: ] | :n: [ :prn:RECP :v: ]
+pattern :n: [{|ɲɔgɔn}::] | :n: [:v: :prn:RECP]
+pattern :n: [{|ɲwaa?n}::] | :n: [:v: :prn:RECP]
+pattern :n: [{ɲɔgɔn|}::] | :n: [:prn:RECP :v:]
# vq derivation
section vq_derivation
-pattern :vq: [ {|ya}:: ] | :n/v: [ :vq: :mrph:DEQU]
-pattern :adj: [ {|man}:: ] | :adj: [ :vq: :mrph:ADJ]
+pattern :vq: [{|ya}::] | :n/v: [:vq: :mrph:DEQU]
+pattern :adj: [{|man}::] | :adj: [:vq: :mrph:ADJ]
# numeral derivation
section num_derivation
-pattern :num: [ {@nasal-v@|na}:: ] | :num: [ :num: :mrph:PRICE]
-pattern :num: [ {@nonnasal-v@|la}:: ] | :num: [ :num: :mrph:PRICE]
-pattern :num: [ {@nasal-v@|nan}:: ] | :num: [ :num: :mrph:ORD]
-pattern :num: [ {[0-9]+|nan}:: ] | :num: [ :num: :mrph:ORD]
-pattern :num: [ {@nonnasal-v@|lan}:: ] | :num: [ :num: :mrph:ORD]
+pattern :num: [{@nasal-v@|na}::] | :num: [:num: :mrph:PRICE]
+pattern :num: [{@nonnasal-v@|la}::] | :num: [:num: :mrph:PRICE]
+pattern :num: [{@nasal-v@|nan}::] | :num: [:num: :mrph:ORD]
+pattern :num: [{[0-9]+|nan}::] | :num: [:num: :mrph:ORD]
+pattern :num: [{@nonnasal-v@|lan}::] | :num: [:num: :mrph:ORD]
## reduplication
section reduplication
-pattern :v: [ {(?P.+)|(?P=stem)}:: ] | :v: [ :v: :v: ]
-pattern :adj: [ {(?P.+)|(?P=stem)}:: ] | :adj: [ :adj: :adj: ]
-pattern :num: [ {(?P.+)|(?P=stem)}:: ] | :num: [ :num: :num: ]
-pattern :v: [ {(?P.+)|-|(?P=stem)}:: ] | :v: [ :v: :: :v: ]
-pattern :adj: [ {(?P.+)|-|(?P=stem)}:: ] | :adj: [ :adj: :: :adj: ]
-pattern :num: [ {(?P.+)|-|(?P=stem)}:: ] | :num: [ :num: :: :num: ]
-pattern :v: [ {(?P.+)|(?P=stem)|(?P=stem)}:: ] | :v: [ :v: :v: :v: ]
-pattern :adj: [ {(?P.+)|(?P=stem)|(?P=stem)}:: ] | :adj: [ :adj: :adj: :adj: ]
+pattern :v: [{(?P.+)|(?P=stem)}::] | :v: [:v: :v:]
+pattern :adj: [{(?P.+)|(?P=stem)}::] | :adj: [:adj: :adj:]
+pattern :num: [{(?P.+)|(?P=stem)}::] | :num: [:num: :num:]
+pattern :v: [{(?P.+)|-|(?P=stem)}::] | :v: [:v: :: :v:]
+pattern :adj: [{(?P.+)|-|(?P=stem)}::] | :adj: [:adj: :: :adj:]
+pattern :num: [{(?P.+)|-|(?P=stem)}::] | :num: [:num: :: :num:]
+pattern :v: [{(?P.+)|(?P=stem)|(?P=stem)}::] | :v: [:v: :v: :v:]
+pattern :adj: [{(?P.+)|(?P=stem)|(?P=stem)}::] | :adj: [:adj: :adj: :adj:]
## composition
# general part-of-speech composition patterns
@@ -154,44 +154,44 @@ section pos_composition
# two-words composites
# n.prop + n = n ex: Irisi.jamana
-pattern :n: [ :n.prop: :n: ] | :n: [ :n.prop: :n: ]
+pattern :n: [:n.prop: :n:] | :n: [:n.prop: :n:]
# v/n + n = n
-pattern :n: [ :n/v: :n: ] | :n: [ :n/v: :n: ]
+pattern :n: [:n/v: :n:] | :n: [:n/v: :n:]
# n + v = n/v
-pattern :n/v: [ :n: :v: ] | :n/v: [ :n: :v: ]
+pattern :n/v: [:n: :v:] | :n/v: [:n: :v:]
# n + adj/num = n
-pattern :n: [ :n: :adj/num: ] | :n: [ :n: :adj/num: ]
+pattern :n: [:n: :adj/num:] | :n: [:n: :adj/num:]
# dtm + v = n
-pattern :n: [ :dtm: :v: ] | :n: [ :dtm: :v: ]
+pattern :n: [:dtm: :v:] | :n: [:dtm: :v:]
# pp + n = n ex. kɔkan.maliden, kɔnɔ.mɔgɔ
-pattern :n: [ :pp: :n: ] | :n: [ :pp: :n: ]
+pattern :n: [:pp: :n:] | :n: [:pp: :n:]
# three-words composites
# n + adj/pp/num + n = n -> added num : san.duuru.baara
-pattern :n: [ :n: :adj/pp/num: :n: ] | :n: [ :n: :adj/pp/num: :n: ]
+pattern :n: [:n: :adj/pp/num: :n:] | :n: [:n: :adj/pp/num: :n:]
# dtm/n + v + n = n
-pattern :n: [ :dtm/n: :v: :n: ] | :n: [ :dtm/n: :v: :n: ]
+pattern :n: [:dtm/n: :v: :n:] | :n: [:dtm/n: :v: :n:]
# n + pp + v = n/v
-pattern :n/v: [ :n: :pp: :v: ] | :n/v: [ :n: :pp: :v: ]
+pattern :n/v: [:n: :pp: :v:] | :n/v: [:n: :pp: :v:]
# n+n+n = n yiriwali.nafolo.ko ?
-pattern :n: [ :n: :n: :n: ] | :n: [ :n: :n: :n: ]
+pattern :n: [:n: :n: :n:] | :n: [:n: :n: :n:]
# ??? : mrph not taken into acount (not in dic?)
# v+mrph+n ex: gansi.li.walan
-pattern :n: [ :v: li:mrph: :n: ] | :n: [ :v: :mrph:NMLZ :n: ]
-pattern :n: [ :n: ba:mrph: :n: ] | :n: [ :n: :mrph:AUGM :n: ]
+pattern :n: [:v: li:mrph: :n:] | :n: [:v: :mrph:NMLZ :n:]
+pattern :n: [:n: ba:mrph: :n:] | :n: [:n: :mrph:AUGM :n:]
# v+mrph+v ex: kɔlɔsi.li.kɛ
-pattern :v: [ :v: li:mrph: :v: ] | :v: [ :v: :mrph:NMLZ :v: ]
-pattern :n: [ :v: ka:pm: :v: ] | :n: [ :v: kà:pm:INF :v: ]
+pattern :v: [:v: li:mrph: :v:] | :v: [:v: :mrph:NMLZ :v:]
+pattern :n: [:v: ka:pm: :v:] | :n: [:v: kà:pm:INF :v:]
# four-words composites
# n + pp + n + n = n
-pattern :n: [ :n: :pp: :n: :n: ] | :n: [ :n: :pp: :n: :n: ]
+pattern :n: [:n: :pp: :n: :n:] | :n: [:n: :pp: :n: :n:]
# n + pp + adj + n = n Ex: dugu.jukɔrɔ.nafoloma.fɛn
-pattern :n: [ :n: :pp: :adj: :n: ] | :n: [ :n: :pp: :adj: :n: ]
+pattern :n: [:n: :pp: :adj: :n:] | :n: [:n: :pp: :adj: :n:]
# n+v+v+n : kunnafoni.falen.falen.ko
-pattern :n: [ :n: :v: :v: :n: ] | :n: [ :n: :v: :v: :n: ]
+pattern :n: [:n: :v: :v: :n:] | :n: [:n: :v: :v: :n:]
# orthographically unlikely to be bamana words