@@ -16,6 +16,9 @@ open Sgen_ast
1616% token EQ
1717% token END
1818
19+ % left RARROW
20+ % nonassoc AT
21+
1922% start < Sgen_ast. program> program
2023
2124%%
@@ -62,21 +65,36 @@ let delimited_raw_galaxy :=
6265 | ~= braces(marked_constellation); < Const >
6366
6467let galaxy_content :=
65- | ~= pars(galaxy_content); <>
66- | SHARP ; ~= SYM ; < Id >
67- | ~= delimited_raw_galaxy; < Raw >
68- | g= galaxy_content; h= galaxy_content; { Union (g, h) }
69- | ~= galaxy_content; RARROW ; ~= SYM ; < Access >
70- | AT ; SHARP ; x= SYM ; { Focus (Id x) }
71- | AT ; g= delimited_raw_galaxy; { Focus (Raw g) }
72- | ~= galaxy_content; ~= bracks(substitution); < Subst >
73- | EXEC ; EOL * ; ~= galaxy_content; EOL * ; END ; EXEC ?; < Exec >
74- | LINEXEC ; EOL * ; ~= galaxy_content; EOL * ; END ; LINEXEC ?; < LinExec >
68+ | ~= pars(galaxy_content); <>
69+ | SHARP ; ~= SYM ; < Id >
70+ | ~= delimited_raw_galaxy; < Raw >
71+ | g= galaxy_content; h= galaxy_content; { Union (g, h) }
72+ | ~= galaxy_access; <>
73+ | AT ; ~= focussed_galaxy_content; < Focus >
74+ | ~= galaxy_content; ~= bracks(substitution); < Subst >
75+ | ~= galaxy_block; <>
76+
77+ let focussed_galaxy_content :=
78+ | ~= pars(galaxy_content); <>
79+ | ~= galaxy_access; <>
80+ | SHARP ; ~= SYM ; < Id >
81+ | ~= delimited_raw_galaxy; < Raw >
82+ | ~= galaxy_block; <>
83+
84+ let galaxy_block :=
85+ | EXEC ; EOL * ; ~= galaxy_content; EOL * ; END ; EXEC ?;
86+ < Exec >
87+ | LINEXEC ; EOL * ; ~= galaxy_content; EOL * ; END ; LINEXEC ?;
88+ < LinExec >
7589 | EXEC ; EOL * ; mcs= marked_constellation; EOL * ; END ; EXEC ?;
7690 { Exec (Raw (Const mcs)) }
7791 | LINEXEC ; EOL * ; mcs= marked_constellation; EOL * ; END ; LINEXEC ?;
7892 { LinExec (Raw (Const mcs)) }
7993
94+ let galaxy_access :=
95+ | SHARP ; x= SYM ; RARROW ; y= SYM ; { Access (Id x, y) }
96+ | ~= galaxy_access; RARROW ; y= SYM ; < Access >
97+
8098let substitution :=
8199 | DRARROW ; ~= symbol; < Extend >
82100 | ~= symbol; DRARROW ; < Reduce >
0 commit comments