@@ -69,6 +69,10 @@
6969 %+ knee *expr
7070 |.
7171 %+ cook process-expr-list parse-expr-list
72+++ parse-parened-expr
73+ %+ cook
74+ |=([=expr] [%expr expr])
75+ (ifix [(just '(') (just ')')] (knee *expr |.(parse-expr)))
7276++ print-expr
7377 |= [=expr]
7478 ^- tape
@@ -205,6 +209,7 @@
205209::
206210+$ var
207211 $%
212+ [%dot prefix-expr name]
208213 [%indexed prefix-expr expr]
209214 [%name name]
210215 ==
@@ -221,21 +226,50 @@
221226 (print-expr +>.var)
222227 "]"
223228 ==
229+ %dot
230+ %- zing
231+ :~
232+ (print-prefix-expr +<.var)
233+ "."
234+ (trip +>.var)
235+ ==
224236 ==
225237++ parse-var
226238 %+ knee *var
227239 |.
228− ;~ pose
240+ =>
241+ |%
242+ ++ parse-access
243+ |= =prefix-expr
229244 %+ cook
230− |=([=name * =expr *] [%indexed [%var [%name name]] expr])
245+ |=([* =expr *] [%indexed prefix-expr expr])
231246 ;~ (glue gaw)
232− parse-name
233247 (just '[')
234248 parse-expr
235249 (just ']')
236250 ==
251+ ++ parse-dot
252+ |= =prefix-expr
253+ %+ cook
254+ |=([* =name] [%dot prefix-expr name])
255+ ;~ plug
256+ dot
257+ parse-name
258+ ==
259+ --
260+ ;~ pose
261+ ;< prefix=name bind parse-name
262+ ;~ pose
263+ (parse-access [%var %name prefix])
264+ (parse-dot [%var %name prefix])
265+ (easy [%name prefix])
266+ ==
237267 ::
238− (cook |=(=name [%name name]) parse-name)
268+ ;< prefix=prefix-expr bind parse-parened-expr
269+ ;~ pose
270+ (parse-access prefix)
271+ (parse-dot prefix)
272+ ==
239273 ==
240274:: varlist
241275::
@@ -259,13 +293,9 @@
259293 %+ knee *prefix-expr
260294 |.
261295 ;~ pose
262− %+ cook
263− |=([=expr] [%expr expr])
264− (ifix [(just '(') (just ')')] (knee *expr |.(parse-expr)))
296+ %+ cook |=([=var] [%var var]) parse-var
265297 ::
266− %+ cook
267− |=([=var] [%var var])
268− (knee *var |.(parse-var))
298+ parse-parened-expr
269299 ==
270300++ print-prefix-expr
271301 |= [=prefix-expr]