DECS atree CONTEXT VOID USE standard: { GNU Algol - Abstract syntax trees. Copyright (C) 2011 Jose E. Marchesi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } { Written by Jose E. Marchesi } { This module provides modes, operators and procedures to manipulate abstract syntax trees. The main mode defined in this file is ANODE. } MODE ANODE = STRUCT ( ANODEINFO info, INT number, annotation, par level, ATTR attribute, { Kind of construct represented by this node. } REF MOID type, REF SYMTABLE symbol table, REF TAG tag, REF ANODE next, previous, sub, sequence, nest ); MODE ANODEINFO = STRUCT ( INT procedure level, INT priority, BOOL whether coercion, BOOL whether new lexical level, BOOL need dns, INT level, INT argsize, INT size, REF MODULE module, REF ANODE parent ); MODE MOID = STRUCT ( INT attribute, number, dim, short id, size, BOOL has ref, has flex, has rows, in standard environ, well formed, in use, portable, REF ANODE node, REF MOID sub, equivalent mode, slice, deflexed mode, name, multiple mode, trim, next, rowed ); MODE SYMTABLE = STRUCT ( INT level, nest, attribute, BOOL empty table, initialise frame, initialise anon, proc ops, REF MOID moids, REF ANODE jump to, sequence, REF SYMTABLE previous, outer ); { Please maintain the list of attributes in alphabetical order. } MODE ATTR = INT; ATTR a null = 0, a pattern = 10, a acco symbol = 20, a actual declarer mark = 30, a alt do part = 40, a alt do symbol = 50, a alt equals symbol = 60, a alt formal bounds list = 70, a andf symbol = 80, a and function = 90, a anonymous = 100, a argument = 110, a argument list = 120, a assertion = 130, a assert symbol = 140, a assignation = 150, a assign symbol = 160, a assign to symbol = 170, a at symbol = 180, a begin symbol = 190, a bits c pattern = 200, a bits denotation = 210, a bits pattern = 220, a bits symbol = 230, a bold comment symbol = 240, a bold pragmat symbol = 250, a bold tag = 260, a boolean pattern = 270, a bool symbol = 280, a bound = 290, a bounds = 300, a bounds list = 310, a brief elif if part = 320, a brief integer ouse part = 330, a brief operator declaration = 340, a brief united ouse part = 350, a bus symbol = 360, a by part = 370, a by symbol = 380, a bytes symbol = 390, a call = 400, a case part = 410, a case symbol = 420, a cast = 430, a channel symbol = 440, a char c pattern = 450, a char denotation = 460, a char symbol = 470, a choice = 480, a choice pattern = 490, a class symbol = 500, a closed clause = 510, a close symbol = 520, a code clause = 530, a code symbol = 540, a collateral clause = 550, a collection = 560, a colon symbol = 570, a column function = 580, a column symbol = 590, a comma symbol = 600, a complex pattern = 610, a complex symbol = 620, a compl symbol = 630, a conditional clause = 640, a construct = 650, a declaration list = 660, a declarer = 670, a defining identifier = 680, a defining indicant = 690, a defining operator = 700, a denotation = 710, a deproceduring = 720, a dereferencing = 730, a diagonal function = 740, a diagonal symbol = 750, a do part = 760, a do symbol = 770, a dotdot symbol = 780, a downto symbol = 790, a dynamic replicator = 800, a edoc symbol = 810, a elif if part = 820, a elif part = 830, a elif symbol = 840, a else bar symbol = 850, a else open part = 860, a else part = 870, a else symbol = 880, a empty symbol = 890, a enclosed clause = 900, a end symbol = 910, a enquiry clause = 920, a environ name = 930, a environ symbol = 940, a equals symbol = 950, a error = 960, a error identifier = 970, a esac symbol = 980, a exit symbol = 990, a exponent frame = 1000, a false symbol = 1010, a field = 1020, a field identifier = 1030, a field selection = 1040, a file symbol = 1050, a firm = 1060, a fi symbol = 1070, a fixed c pattern = 1080, a flex symbol = 1090, a float c pattern = 1100, a formal bounds = 1110, a formal bounds list = 1120, a formal declarer mark = 1130, a formal declarers = 1140, a formal declarers list = 1150, a format a frame = 1160, a format close symbol = 1170, a format delimiter symbol = 1180, a format d frame = 1190, a format e frame = 1200, a format identifier = 1210, a format i frame = 1220, a format item a = 1230, a format item b = 1240, a format item c = 1250, a format item d = 1260, a format item e = 1270, a format item escape = 1280, a format item f = 1290, a format item g = 1300, a format item h = 1310, a format item i = 1320, a format item j = 1330, a format item k = 1340, a format item l = 1350, a format item m = 1360, a format item minus = 1370, a format item n = 1380, a format item o = 1390, a format item p = 1400, a format item plus = 1410, a format item point = 1420, a format item q = 1430, a format item r = 1440, a format item s = 1450, a format item t = 1460, a format item u = 1470, a format item v = 1480, a format item w = 1490, a format item x = 1500, a format item y = 1510, a format item z = 1520, a format open symbol = 1530, a format pattern = 1540, a format point frame = 1550, a format symbol = 1560, a format text = 1570, a format z frame = 1580, a formula = 1590, a for part = 1600, a for symbol = 1610, a from part = 1620, a from symbol = 1630, a general c pattern = 1640, a general pattern = 1650, a generator = 1660, a generic argument = 1670, a generic argument list = 1680, a go symbol = 1690, a goto symbol = 1700, a heap symbol = 1710, a identifier = 1720, a identity declaration = 1730, a identity relation = 1720, a if part = 1730, a if symbol = 1740, a indicant = 1750, a initialiser series = 1760, a insertion = 1770, a in symbol = 1780, a int denotation = 1790, a integer case clause = 1800, a integer choice clause = 1810, a integer in part = 1820, a integer out part = 1830, a integral c pattern = 1840, a integral mould = 1850, a integral pattern = 1860, a int symbol = 1870, a in type mode = 1880, a isnt symbol = 1890, a is symbol = 1900, a jump = 1910, a keyword = 1920, a label = 1930, a labeled unit = 1940, a label identifier = 1950, a label sequence = 1960, a literal = 1970, a local label = 1980, a loc symbol = 1990, a longety = 2000, a long symbol = 2010, a loop clause = 2020, a loop identifier = 2030, a main symbol = 2040, a meek = 2050, a mode bits = 2060, a mode bool = 2070, a mode bytes = 2080, a mode char = 2090, a mode complex = 2100, a mode declaration = 2110, a mode file = 2120, a mode format = 2130, a mode int = 2140, a mode long bits = 2150, a mode long bytes = 2160, a mode long complex = 2170, a mode long int = 2180, a mode longlong bits = 2190, a mode longlong complex = 2200, a mode longlong int = 2210, a mode longlong real = 2220, a mode long real = 2230, a mode no check = 2240, a mode pipe = 2250, a mode real = 2260, a mode sound = 2270, a mode symbol = 2280, a monadic formula = 2290, a monad sequence = 2300, a new symbol = 2310, a nihil = 2320, a nil symbol = 2330, a normal identifier = 2340, a no sort = 2350, a occa symbol = 2360, a od symbol = 2370, a of symbol = 2380, a open part = 2390, a open symbol = 2400, a operator = 2410, a operator declaration = 2420, a operator plan = 2430, a op symbol = 2440, a orf symbol = 2450, a or function = 2460, a ouse case part = 2470, a ouse symbol = 2480, a out part = 2490, a out symbol = 2500, a out type mode = 2510, a parallel clause = 2520, a parameter = 2530, a parameter identifier = 2540, a parameter list = 2550, a parameter pack = 2560, a par symbol = 2570, a particular program = 2580, a picture = 2590, a picture list = 2600, a pipe symbol = 2610, a point symbol = 2620, a primary = 2630, a priority = 2640, a priority declaration = 2650, a prio symbol = 2660, a procedure declaration = 2670, a procedure variable declaration = 2680, a proceduring = 2690, a proc symbol = 2700, a protect from sweep = 2710, a qualifier = 2720, a radix frame = 2730, a real denotation = 2740, a real pattern = 2750, a real symbol = 2760, a ref symbol = 2770, a replicator = 2780, a routine text = 2790, a routine unit = 2800, a row assignation = 2810, a row assign symbol = 2820, a row char denotation = 2830, a row function = 2840, a rowing = 2850, a rows symbol = 2860, a row symbol = 2870, a secondary = 2880, a selection = 2890, a selector = 2900, a sema symbol = 2910, a semi symbol = 2920, a serial clause = 2930, a series mode = 2940, a shortety = 2950, a short symbol = 2960, a sign mould = 2970, a skip = 2980, a skip symbol = 2990, a slice = 3000, a soft = 3010, a some clause = 3020, a sound symbol = 3030, a specification = 3040, a specified unit = 3050, a specified unit list = 3060, a specified unit unit = 3070, a specifier = 3080, a specifier identifier = 3090, a standard = 3100, a static replicator = 3110, a stowed mode = 3120, a string c pattern = 3130, a string pattern = 3140, a string symbol = 3150, a strong = 3160, a struct symbol = 3170, a structured field = 3180, a structured field list = 3190, a structure pack = 3200, a style i comment symbol = 3210, a style ii comment symbol = 3220, a style i pragmat symbol = 3230, a sub symbol = 3240, a sub unit = 3250, a tertiary = 3260, a then bar symbol = 3270, a then part = 3280, a then symbol = 3290, a to part = 3300, a to symbol = 3310, a transpose function = 3320, a transpose symbol = 3330, a trimmer = 3340, a true symbol = 3350, a union declarer list = 3360, a union pack = 3370, a union symbol = 3380, a unit = 3390, a united case clause = 3400, a united choice = 3410, a united in part = 3420, a united ouse part = 3430, a uniting = 3440, a unit list = 3450, a unit series = 3460, a until part = 3470, a until symbol = 3480, a variable declaration = 3490, a virtual declarer mark = 3500, a voiding = 3510, a void symbol = 3520, a weak = 3530, a while part = 3540, a while symbol = 3550, a widening = 3560, a wildcard = 3570; KEEP { Modes. } ANODE, ANODEINFO, MOID, SYMTABLE, ATTR, { Attributes. Please maintain this list ordered alphabetically. } a null, a pattern, a acco symbol, a actual declarer mark, a alt do part, a alt do symbol, a alt equals symbol, a alt formal bounds list, a andf symbol, a and function, a anonymous, a argument, a argument list, a assertion, a assert symbol, a assignation, a assign symbol, a assign to symbol, a at symbol, a begin symbol, a bits c pattern, a bits denotation, a bits pattern, a bits symbol, a bold comment symbol, a bold pragmat symbol, a bold tag, a boolean pattern, a bool symbol, a bound, a bounds, a bounds list, a brief elif if part, a brief integer ouse part, a brief operator declaration, a brief united ouse part, a bus symbol, a by part, a by symbol, a bytes symbol, a call, a case part, a case symbol, a cast, a channel symbol, a char c pattern, a char denotation, a char symbol, a choice, a choice pattern, a class symbol, a closed clause, a close symbol, a code clause, a code symbol, a collateral clause, a collection, a colon symbol, a column function, a column symbol, a comma symbol, a complex pattern, a complex symbol, a compl symbol, a conditional clause, a construct, a declaration list, a declarer, a defining identifier, a defining indicant, a defining operator, a denotation, a deproceduring, a dereferencing, a diagonal function, a diagonal symbol, a do part, a do symbol, a dotdot symbol, a downto symbol, a dynamic replicator, a edoc symbol, a elif if part, a elif part, a elif symbol, a else bar symbol, a else open part, a else part, a else symbol, a empty symbol, a enclosed clause, a end symbol, a enquiry clause, a environ name, a environ symbol, a equals symbol, a error, a error identifier, a esac symbol, a exit symbol, a exponent frame, a false symbol, a field, a field identifier, a field selection, a file symbol, a firm, a fi symbol, a fixed c pattern, a flex symbol, a float c pattern, a formal bounds, a formal bounds list, a formal declarer mark, a formal declarers, a formal declarers list, a format a frame, a format close symbol, a format delimiter symbol, a format d frame, a format e frame, a format identifier, a format i frame, a format item a, a format item b, a format item c, a format item d, a format item e, a format item escape, a format item f, a format item g, a format item h, a format item i, a format item j, a format item k, a format item l, a format item m, a format item minus, a format item n, a format item o, a format item p, a format item plus, a format item point, a format item q, a format item r, a format item s, a format item t, a format item u, a format item v, a format item w, a format item x, a format item y, a format item z, a format open symbol, a format pattern, a format point frame, a format symbol, a format text, a format z frame, a formula, a for part, a for symbol, a from part, a from symbol, a general c pattern, a general pattern, a generator, a generic argument, a generic argument list, a go symbol, a goto symbol, a heap symbol, a identifier, a identity declaration, a identity relation, a if part, a if symbol, a indicant, a initialiser series, a insertion, a in symbol, a int denotation, a integer case clause, a integer choice clause, a integer in part, a integer out part, a integral c pattern, a integral mould, a integral pattern, a int symbol, a in type mode, a isnt symbol, a is symbol, a jump, a keyword, a label, a labeled unit, a label identifier, a label sequence, a literal, a local label, a loc symbol, a longety, a long symbol, a loop clause, a loop identifier, a main symbol, a meek, a mode bits, a mode bool, a mode bytes, a mode char, a mode complex, a mode declaration, a mode file, a mode format, a mode int, a mode long bits, a mode long bytes, a mode long complex, a mode long int, a mode longlong bits, a mode longlong complex, a mode longlong int, a mode longlong real, a mode long real, a mode no check, a mode pipe, a mode real, a mode sound, a mode symbol, a monadic formula, a monad sequence, a new symbol, a nihil, a nil symbol, a normal identifier, a no sort, a occa symbol, a od symbol, a of symbol, a open part, a open symbol, a operator, a operator declaration, a operator plan, a op symbol, a orf symbol, a or function, a ouse case part, a ouse symbol, a out part, a out symbol, a out type mode, a parallel clause, a parameter, a parameter identifier, a parameter list, a parameter pack, a par symbol, a particular program, a picture, a picture list, a pipe symbol, a point symbol, a primary, a priority, a priority declaration, a prio symbol, a procedure declaration, a procedure variable declaration, a proc symbol, a protect from sweep, a qualifier, a radix frame, a real denotation, a real pattern, a real symbol, a ref symbol, a replicator, a routine text, a routine unit, a row assignation, a row assign symbol, a row char denotation, a row function, a rowing, a rows symbol, a row symbol, a secondary, a selection, a selector, a sema symbol, a semi symbol, a serial clause, a series mode, a shortety, a short symbol, a sign mould, a skip, a skip symbol, a slice, a soft, a some clause, a sound symbol, a specification, a specified unit, a specified unit list, a specified unit unit, a specifier, a specifier identifier, a standard, a static replicator, a stowed mode, a string c pattern, a string pattern, a string symbol, a strong, a struct symbol, a structured field, a structured field list, a structure pack, a style i comment symbol, a style ii comment symbol, a style i pragmat symbol, a sub symbol, a sub unit, a tertiary, a then bar symbol, a then part, a then symbol, a to part, a to symbol, a transpose function, a transpose symbol, a trimmer, a true symbol, a union declarer list, a union pack, a union symbol, a unit, a united case clause, a united choice, a united in part, a united ouse part, a uniting, a unit list, a unit series, a until part, a until symbol, a variable declaration, a virtual declarer mark, a voiding, a void symbol, a weak, a while part, a while symbol, a widening, a wildcard FINISH