No edit summary
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
The simplest program :
The simplest program :


  <pre style="font-family:'Noto Mono';background:black;color:lime">
  <syntaxhighlight lang="ada">
with TEXT_IO;
with TEXT_IO;
           -----------
           -----------
Line 11: Line 11:
   TEXT_IO.PUT_LINE( "Hello_world !" );
   TEXT_IO.PUT_LINE( "Hello_world !" );
end;
end;
</pre>
</syntaxhighlight>


A simple ASCII JSON reader program :
A simple ASCII JSON reader/writer program :
<pre style="font-family:'Noto Mono';background:black;color:lime">-- JSON.ADS VINCENT MORIN 25/2/2025 UNIVERSITE DE BRETAGNE OCCIDENTALE (UBO)
[[JSON package]]
-------------------------------------------------------------------------------------------------------------------------
-- 1 2 3 4 5 6 7 8 9 0 1 2


'''Micro-controller programming'''


with TEXT_IO;
'''Ada 83''' is a very convenient tool for micro-controller programming. The famous Arduino boards equipped with AVR chips can be programmed in '''Ada 83'''. Some examples [[Ada_83_on AVR_chips|here]].
----
package JSON
----
is
 
  type ITEM is private;
 
  type ITEM_TYPE is ( OBJECT_ITEM, ARRAY_ITEM,
    STRING_ITEM, INTEGER_ITEM, FLOAT_ITEM, BOOLEAN_ITEM, NULL_ITEM );
 
  subtype TERMINAL_TYPE is ITEM_TYPE range STRING_ITEM .. NULL_ITEM;
 
  subtype FILE_TYPE is TEXT_IO.FILE_TYPE;
 
  MAX_STRING_LENGTH :constant NATURAL := 2**15-1;
  subtype STRING_LENGTH is NATURAL range 0 .. MAX_STRING_LENGTH;
 
  type VALUE_DATA (KIND :TERMINAL_TYPE := NULL_ITEM; LENGTH :STRING_LENGTH := 0)
is record
  case  KIND
  is
    when STRING_ITEM => STRING_VAL :STRING( 1 .. LENGTH );
    when INTEGER_ITEM => INT_VAL :INTEGER;
    when FLOAT_ITEM => FLOAT_VAL :LONG_FLOAT;
    when BOOLEAN_ITEM => BOOL_VAL :BOOLEAN;
    when NULL_ITEM => null;
  end case;
end record;
 
 
--  J S O N  I T E M  I / O
 
 
  procedure GET ( FILE :in JSON.FILE_TYPE; THE_ITEM :out ITEM );
  procedure PUT ( FILE :in out JSON.FILE_TYPE; THE_ITEM :ITEM );
  function  STRING_OF ( THE_ITEM :ITEM) return STRING;
  function  ITEM_OF ( THE_STRING :STRING) return ITEM;
 
 
--  J S O N  I T E M  I N T E R A C T I O N
 
 
  function  KIND ( OF_ITEM :ITEM ) return ITEM_TYPE;
  function  IS_PRESENT ( KEY :STRING; IN_OBJECT :ITEM ) return BOOLEAN;
  function  ITEM_BY_KEY ( KEY :STRING; IN_OBJECT :ITEM ) return ITEM;
  function  ITEM_VALUE ( OF_ITEM :ITEM ) return VALUE_DATA;
  function  NUMBER_OF_SUB_ITEMS ( IN_ITEM :ITEM ) return NATURAL;
  procedure FREE ( THE_ITEM :in out ITEM );
 
  generic
    with procedure APPLY_PROCESS ( ON_ITEM :in out ITEM; LAST_ONE :in BOOLEAN; STOP_PROCESS :out BOOLEAN );
  procedure FOR_EACH_JSON_ITEM ( OF_ARRAY :ITEM );
 
  generic
    with procedure APPLY_PROCESS ( KEY :STRING; ON_ITEM :in out ITEM; LAST_ONE :in BOOLEAN; STOP_PROCESS :out BOOLEAN );
  procedure FOR_EACH_JSON_FIELD ( OF_OBJECT :ITEM );
 
 
  SYNTAX_ERROR, BAD_ITEM_TYPE, VALUE_NOT_FOUND : exception;
 
 
-- 1 2 3 4 5 6 7 8 9 0 1 2
-------------------------------------------------------------------------------------------------------------------------
 
pragma PAGE;
private
 
  type ITEM_DEFINITION (KIND :JSON.ITEM_TYPE);
  type ITEM is access ITEM_DEFINITION;
 
  type OBJECT_FIELD;
  type OBJECT_FIELD_ACCESS is access OBJECT_FIELD;
 
  type ITEM_LIST_ELEMENT;
  type LIST_OF_ITEMS is access ITEM_LIST_ELEMENT;
 
  type STRING_ACCESS is access STRING;
 
 
  type ITEM_DEFINITION (KIND :ITEM_TYPE) is record
  case KIND is
  when  OBJECT_ITEM => FIELDS_LIST : OBJECT_FIELD_ACCESS;
  when  ARRAY_ITEM => ITEMS_LIST : LIST_OF_ITEMS;
  when  STRING_ITEM => STR_ACCESS : STRING_ACCESS;
  when  INTEGER_ITEM => INT_VAL : INTEGER;
  when  FLOAT_ITEM => FLOAT_VAL : LONG_FLOAT;
  when  BOOLEAN_ITEM => BOOL_VAL : BOOLEAN;
  when  NULL_ITEM => null;
  end case;
end record;
 
 
  type OBJECT_FIELD is record
  FIELD_KEY : STRING_ACCESS;
  FIELD_ITEM : ITEM;
  NEXT : OBJECT_FIELD_ACCESS;
end record;
 
 
  type ITEM_LIST_ELEMENT is record
  LIST_ITEM : ITEM;
  NEXT : LIST_OF_ITEMS;
end record;
 
----
end JSON;
----
 
-- 1 2 3 4 5 6 7 8 9 0 1 2
-------------------------------------------------------------------------------------------------------------------------
 
 
 
</pre>

Latest revision as of 17:57, 29 March 2025

Examples

The simplest program :

with TEXT_IO;
          -----------
procedure HELLO_WORLD
is        -----------
begin
  TEXT_IO.PUT_LINE( "Hello_world !" );
end;

A simple ASCII JSON reader/writer program : JSON package

Micro-controller programming

Ada 83 is a very convenient tool for micro-controller programming. The famous Arduino boards equipped with AVR chips can be programmed in Ada 83. Some examples here.