Contents | Index | < Browse | Browse >

8.  ADL Program Structure

     In	the following extended BNF description of  ADL	pro-
gram  structure,  terminal symbols are in BOLD UPPERCASE and
non-terminals in lowercase.  Items enclosed  in	 quotes	 are
literal	terminals.


     adlprog =	     stmt *

     stmt    =	     "INCLUDE"	     STRING  ";"
	     =	     "MESSAGE"	     STRING  ";"
	     =	     decl
	     =	     assign

     decl    =	     "VERB"	     ilist
	     =	     "ADJEC"	     ilist
	     =	     "ROUTINE"		     ilist
	     =	     "ARTICLE"		     ilist
	     =	     "PREP"	     ilist
	     =	     "VAR"	     vlist
	     =	     "NOUN"	     nlist

     assign  =	     ID	 "="  expr  ";"
	     =	     nounp  "("	 nprop	")"  "="  expr	";"
	     =	     VERB  "("	vprop  ")"  "="	 routine  ";"
	     =	     "("  VAR  [ "+"  const ]  ")"  "="	 expr  ";"
	     =	     PREP  nounp  PREP	"="  PREP  ";"
	     =	     VERB  PREP	 "="  VERB  ";"

     ilist   =	     ID	 ( ","	ID ) *	";"

     vlist   =	     vdec  ( ","  vdec ) *  ";"

     vdec    =	     ID	 [ "["	const  "]" ]

     nlist   =	     nloc  ( ","  nloc	) *  ";"

     nloc    =	     nounp  [ "("  nounp  ")" ]

     nounp   =	     [ modif ]	NOUN
	     =	     OBJECT

     modif   =	     VERB
	     =	     ADJEC

     vprop   =	     "PREACT"
	     =	     "ACTION"

     nprop   =	     const
	     =	     "LDESC"
	     =	     "SDESC"
	     =	     "ACTION"

     const   =	     NUMBER
	     =	     CONST_ID

     expr    =	     const
	     =	     STRING
	     =	     nounp
	     =	     routine
	     =	     modif
	     =	     ROUTINE
	     =	     PREP
	     =	     ARTICLE
	     =	     VAR

     routine =	     [ locals ]	 form +

     locals  =	     "LOCAL"  vlist

     form    =	     "("  ifthen   elseif *   [	else ]	")"
	     =	     "("  "WHILE"  arg	"DO"   form +  ")"
	     =	     "("  arg +	 ")"

     ifthen  =	     "IF"  arg	"THEN"	form +

     elseif  =	     "ELSEIF"  arg  "THEN"  form +

     else    =	     "ELSE"  form +

     arg     =	     form
	     =	     "@"  VAR
	     =	     "["  nounp	 "]"
	     =	     ".ME"
	     =	     "%"NUMBER
	     =	     const
	     =	     STRING
	     =	     NOUN
	     =	     OBJECT
	     =	     ROUTINE
	     =	     modif
	     =	     PREP
	     =	     ARTICLE
	     =	     VAR
	     =	     vprop
	     =	     nprop