[Inhalt] [Zurück] [Weiter] [Thema] [Index]

Formale Syntaxbeschreibung


Die folgenden Regeln bilden formal die Grammatik, die die Sprache AZUR beschreibt. Bis zur Regel "const -> ..." finden sich solche, die kein Terminalsymbol produzieren, demnach auch kein Eingabesymbol verbrauchen, ab "ident -> ..." sind dann die Terminalproduktionen angegegben. Man beachte, dass die Grammatik nur den syntaktischen Aufbau der Sprache beschreibt. Weitergehende Definitionen zum Erstellen semantisch korrekter Programme sind im Kapitel Semantik aufgeführt.

azurprogram  ->  azurfunc | azurfunc ; azurprogramm .
azurfunc  ->  ident parameters returntype; cmdlist end | interface ident parameters returntype; | uses ident ;const ident = expression;
parameters  ->  () | ( decllist ) | (ellipsis)
decllist  ->  decl | decl , decllist | decl , ellipsis
decl  ->  ident ident | ident ident = expression
returntype  ->  : ident | e
cmdlist  ->  command; | command ; cmdlist
command  ->  forloop | whileloop | repeatloop | ifstmt | assignment | procedurecall | returnstmt
forloop  ->  forall ident in expression cmdlist endfor
whileloop  ->  while ( condition ); cmdlist endwhile
repeatloop  ->  repeat; cmdlist until ( condition )
ifstmt  ->  if ( condition ); cmdlist elsebranch
elsebranch  ->  endif | else; cmdlist endif | elseif ( condition ); cmdlist elsebranch
assignment  ->  ident := expression   |   ident++   |   ident --   |   ident += expression   |   ident -= expression
procedurecall  ->  ident paramlist
paramlist  ->  () | ( exprlist )
returnstmt  ->  return expression
exprlist  ->  expression | expression , exprlist
condition  ->  monomlist | monomlist or condition
monomlist  ->  monom | monom and monomlist
monom  ->  expression cmpop expression | not monom | (condition)
cmpop  ->  = | # | < | > | <= | >=
intervall  ->  [expression , expression]
distanz  ->  ~ expression
zp  ->  @ factor
distanz  ->  ~ factor
expression  ->  term | term addop expression
term  ->  factor | factor mulop term
factor  ->  functioncall | const | ident | ( expression ) | - expression | NOT expression | zp | distanz | geopoint
addop  ->  + | -
mulop  ->  * | / | ^
functioncall  ->  ident paramlist
const  ->  number | stringconst | ident
ident  ->  _|$|a-z|A-Z [_|a-z|A-Z|0-9 [...] ]
number  ->  NUMBER
stringconst  ->  STRINGCONST
bracketopen  ->  (
bracketclose  ->  )
braceopen  ->  [
braceclose  ->  ]
scopeopen  ->  {
scopeclose  ->  }
Assignment  ->  :=
equal  ->  =
smaller  ->  <
greater  ->  >
smallerequal  ->  <=
greaterequal  ->  >=
notequal  ->  #
semicolon  ->  ;
comma  ->  ,
colon  ->  :
alpha  ->  @
tilde  ->  ~
ellipsis  ->  ...
plus  ->  +
minus  ->  -
mult  ->  *
div  ->  /
tothepower  ->  ^
and  ->  AND
or  ->  OR
not  ->  NOT
if  ->  IF
else  ->  ELSE
endif  ->  ENDIF
forall  ->  FORALL
in  ->  IN
endfor  ->  ENDFOR
while  ->  WHILE
endwhile  ->  ENDWHILE
repeat  ->  REPEAT
until  ->  UNTIL
return  ->  RETURN
extern  ->  EXTERN
uses  ->  USES
end  ->  END
arrayelement  ->  ident [ ident ]
increment  ->  ident ++
decrement  ->  ident --
plusequal  ->  ident += expression
minusequal  ->  ident -= expression
mulequal  ->  ident *= expression
divequal  ->  ident /= expression
Increment  ->  ++
Decrement  ->  --
Plusequal  ->  +=
Minusequal  ->  -=
Mulequal  ->  *=
Divequal  ->  /=
elseif  ->  ENDIF
caseequal  ->  ~=
constspec  ->  CONST

Wie an der Regel "factor -> ..." zu erkennen, handelt es sich nicht um eine LR(2)-Grammatik. Es ist sicher möglich, diese Grammatik in eine LR(1) umzuwandeln. Darauf wurde aber bewusst verzichtet, da es die Lesbarkeit erheblich beeinträchtigt hätte.



toposoft GmbH 24. September 2014