https://gcc.gnu.org/g:87ef30fa3130f3260db6a0d13c8d2e185cd25f51
commit r16-9334-g87ef30fa3130f3260db6a0d13c8d2e185cd25f51 Author: Jose E. Marchesi <[email protected]> Date: Wed Jun 3 16:45:44 2026 +0200 a86: add syntax on modes and nests to ga68.vw Signed-off-by: Jose E. Marchesi <[email protected]> gcc/algol68/ChangeLog * ga68.vw (Modes and nests): Incorporate syntax from the RR chapter 7. (cherry picked from commit e123cd977b90082c71ae98cb816f607e5b9a8fd7) Diff: --- gcc/algol68/ga68.vw | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/gcc/algol68/ga68.vw b/gcc/algol68/ga68.vw index 419d230e7a4a..7ee826815ae6 100644 --- a/gcc/algol68/ga68.vw +++ b/gcc/algol68/ga68.vw @@ -1434,6 +1434,198 @@ b) voided to{61A} void COMORF : b) PROC VOID (pp) (in PROC PROC VOID pp = PROC VOID : (print (1); VOID : print (2)); PROC VOID (pp);) } +7 Modes and nests + +{ The syntax in this chapter formalizes the notion of indepencence + that all properties contained in a given reach must hold in order to + avoid ambiguity in applied indicators, the identification process + that assures every applied indicator corresponds to an existing + property, the structural equivalence of modes, and finally the + well-formedness of modes. } + +7.1 Independence of properties + +7.1.1 Syntax + +A) PREF :: procedure yielding : REF to. +B) NONPREF :: PLAIN ; STOWED ; + procedure with PARAMETERS yielding MOID ; UNITD ; void. +C) *PREFSETY :: PREF PREFSETY ; EMPTY. + +a) WHETHER PROP1 independent PROPS2 PROP2{a,48a,c,72a} : + WHETHER PROP1 independent PROPS2{a,c} + and PROP1 independent PROP2{c}. +b) WHETHER PROP independent EMPTY{48a,c,72a} : WHETHER true. +c) WHETHER QUALITY1 TAX1 + independent QUALITY2 TAX2{a,48a,c,72a} : + unless (TAX1) is (TAX2), WHETHER true ; + where (TAX1) is (TAX2) and (TAX1) is (TAO), + WHETHER QUALITY1 independent QUALITY2{d}. +d) WHETHER QUALITY1 independent QUALITY2{c} : + where QUALITY1 related QUALITY2{e,f,g,h,i,j,-}, + WHETHER false ; + unless QUALITY1 related QUALITY2{e,f,g,h,i,j,-}, + WHETHER true. + +e) WHETHER MONO related DUO{d} : WHETHER false. +f) WHETHER DUO related MONO{d} : WHETHER false. +g) WHETHER PRAM related DYADIC{d} : WHETHER false. +h) WHETHER DYADIC related PRAM{d} : WHETHER false. +i) WHETHER procedure with MODE1 parameter MODE2 parameter + yielding MOID1 related + procedure with MODE3 parameter MODE4 parameter + yielding MOID2{d} : + WHETHER MODE1 firmly related MODE3{k} + and MODE2 firmly related MODE4{k}. +j) WHETHER procedure with MODE1 parameter yielding MOID1 + related procedure with MODE2 parameter yielding + MOID2{d} : + WHETHER MOD1 firmly related MODE2{k}. + +k) WHETHER MOID1 firmly related MOID2{i,j} : + WHETHER MOODS1 is firm MOID2{l,m} + or MOODS2 is firm MOID1{l,m}, + where (MOODS1) is (MOID1) + or (union of MOODS1 mode) is (MOID1), + where (MOODS2) is (MOID2) + or (union of MOODS2 mode) is (MOID2). +l) WHETHER MOODS MOOD is firm MOID{k,l} : + WHETHER MOODS is firm MOID{l,m} + or MOOD is firm MOID{m}. +m) WHETHER MOID1 is firm MOID2{k,l,n,47f} : + WHETHER MOID1 equivalent MOID2{73a} + or MOID1 unites to MOID2{64b} + or MOID1 deprefs to firm MOID2{n}. +n) WHETHER MOID1 deprefs to firm MOID2{m} : + where (MOID1) is (PREF MOID3), + WHETHER MOID5 is firm MOID2{m}, + where MOID3 deflexes to MOID5{47a,b,c} ; + where (MOID1) is (NONPREF), WHETHER false. + +7.2 Identification in nests + +7.2.1 Syntax + +a) WHETHER PROP identified in NEST new PROPSETY{a,48b,542a} : + where PROP resides in PROPSETY{b,c,-}, WHETHER true ; + where PROP independent PROPSETY{71a,b,c}, + WHETHER PROP identified in NEST{a,-}. + +b) WHETHER PROP1 resides in PROPS2 PROP2{a,b,48d} : + WHETHER PROP1 resides in PROP2{c,-} + or PROP1 resides in PROP2{b,c,-}. +c) WHETHER QUALITY1 TAX resides in QUALITY2 TAX{a,b,48d} : + where (QUALITY1) is (label) or (QUALITY1) is (DYADIC) + or (QUALITY1) is (MODE field), + WHETHER (QUALITY1) is (QUALITY2) ; + where (QUALITY1) is (MOID1 TALLETY) + and (QUALITY2) is (MOID2 TALLETY), + WHETHER MOID1 equivalent MOID2{73a}. + +7.3 Equivalence of modes + +7.3.1 Syntax + +A) SAFE :: safe ; MU has MODE SAFE ; yin SAFE ; yang SAFE ; + remember MOID1 MOID2 SAFE. +B) HEAD :: PLAIN ; PREF{71A} ; structured with ; + FLEXETY ROWS of ; proecedure with ; union of ; void. +C) TAILETY :: MOID ; FIELDS mode ; PARAMETERS yielding MOID ; + MOODS mode ; EMPTY. +D) PARTS :: PART ; PARTS PART. +E) PART :: FIELD ; PARAMETER. + +a) WHETHER MOID1 equivalent MOID2{64b,71m,72c} : + WHETHER safe MOID1 equivalent safe MOID2{b}. +b) WHETHER SAFE1 MOID1 equivalent SAFE2 MOID2{a,b,e,i,j,n} : + where (SAFE1) contains (remember MOID1 MOID2) + or (SAFE2) contains (remember MOID2 MOID1), + WHETHER true ; + unless (SAFE1) contains (remember MOID1 MOID2) + or (SAFE2) contains (remember MOID2 MOID1), + WEHTHER (HEAD3) is (HEAD4) + and remember MOID1 MOID2 SAFE3 TAILETY3 + equivalent SAFE4 TAILETY4{b,d,e,k,q,-}, + where SAFE3 HEAD3 TAILETY3 develops from + SAFE1 MOID1{c} + and SAFE4 HEAD4 TAILETY4 develops from + SAFE2 MOID2{c}. +c) WHETHER SAFE2 HEAD TAILETY develops from SAFE1 MOID{b,c} : + where (MOID) is (HEAD TAILETY), + WHETHER (HEAD) shields SAFE1 to SAFE2{74a,b,c,d,-} ; + where (MOID) is (MU definition of MODE), + unless (SAFE1) contains (MU has), + WHETHER SAFE2 HEAD TAILETY develops from + MU has MODE SAFE1 MODE{c} ; + where (MOID) is (MU application) + and (SAFE1) is (NOTION MU has MODE SAFE3) + and (NOTION) contains (yin) and (NOTION) contains (yang), + WHETHER SAFE2 HEAD TEILETY develops from + SAFE1 MODE{c}. +d) WHETHER SAFE1 FIELDS1 mode + equivalent SAFE2 FIELDS2 mode{b} : + WHETHER SAFE1 FIELDS1 equivalent SAFE2 FIELDS2{f,g,h,i}. +e) WHETHER SAFE1 PARAMETERS1 yielding MOID1 + equivalent SAFE2 PARAMETERS2 yielding MOID2{b} : + WHETHER SAFE1 PARAMETERS1 + equivalent SAFE2 PARAMETERS2{f,g,h,j} + and SAFE1 MOID1 equivalent SAFE2 MOID2{b}. +f) WHETHER SAFE1 PARTS1 PART1 + equivalent SAFE2 PARTS2 PART2{d,e,f} : + WHETHER SAFE1 PARTS1 equivalent SAFE2 PARTS2{f,g,h,i,j} + and SAFE1 PART1 equivalent SAFE2 PART2{i,j}. +g) WHETHER SAFE1 PARTS1 PART1 equivalent + SAFE2 PART2{d,e,f} : + WHETHER false. +h) WHETHER SAFE1 PART1 equivalent + SAFE2 PARTS2 PART2{d,e,f} : + WHETHER false. +i) WHETHER SAFE1 MODE1 field TAG1 + equivalent SAFE2 MODE2 field TAG2{d,f} : + WHETHER (TAG1) is (TAG2) + and SAFE1 MODE1 equivalent SAFE2 MODE2{b}. +j) WHETHER SAFE1 MODE1 parameter + equivalent SAFE2 MODE2 parameter{e,f} : + WHETHER SAFE1 MODE1 equivalent SAFE2 MODE2{b}. +k) WHETHER SAFE1 MOODS1 mode equivalent + SAFE2 MOODS2 mode{b} : + WHETHER SAFE1 MOODS1 subset of SAFE2 MOODS2{l,m,n} + and SAFE2 MOODS2 subset of SAFE1 MOODS1{l,m,n} + and MOODS1 number equals MOODS2 number{o,p}. +l) WHETHER SAFE1 MOODS1 MOOD1 + subset of SAFE2 MOODS2{k.l,46s,64b} : + WHETHER SAFE1 MOODS1 subset of SAFE2 MOODS2{l,m,n} + and SAFE1 MOOD1 subset of SAFE2 MOODS2{m,n}. +m) WHETHER SAFE1 MOOD1 + subset of SAFE2 MOODS2 MOOD2{k.l,m,46s,64b} : + WHETHER SAFE1 MOOD1 subset of SAFE2 MOODS2{m,n} + or SAFE1 MOOD1 subset of SAFE2 MOOD2{n}. +n) WHETHER SAFE1 MOOD1 subset of SAFE2 MOOD2{k,l,m,64b} : + WHETHER SAFE1 MOOD1 equivalent SAFE2 MOOD2{b}. +o) WHETHER MOODS1 MOOD1 number equals + MOODS2 MOOD2 number{k,o} : + WHETHER MOODS1 number equals MOODS2 number{o,p,-}. +p) WHETHER MOOD1 number equals MOOD2 number{k.o} : + WHETHER true. +q) WHETHER SAFE1 EMPTY equivalent SAFE2 EMPTY{b} : + WHETHER true. + +7.4 Well-formedness + +7.4.1 Syntax + +a) WHETHER (NOTION) shields SAFE to SAFE{73c} : + where (NOTION) is (PLAIN) + or (NOTION) is (FLEXETY ROWS of) + or (NOTION) is (union of) or (NOTION) is (void), + WHETHER true. +b) WHETHER (PREF) shields SAFE to yin SAFE{73c} : + WHETHER true. +c) WHETHER (structured with) shields SAFE to yang SAFE{73c} : + WHETHER true. +d) WHETHER (procedure with) shields SAFE to yin yang SAFE{73c} : + WHETHER true. + 8 Denotations 8.1 Plain denotations
