\begin{diagram}{Class types}{classtype}
\begin{mysyntdiag}
\[ \lit*{packed} \]
\lit*{class} 
\[ heritage \]
\[ 
\begin{rep}[b]
  \synt{component\ list} \\ 
  \synt{class\ visibility\ specifier} 
\end{rep} \lit*{end} 
\]
\end{mysyntdiag}
\begin{mysyntdiag}
\synt{heritage} \lit*( \synt{class\ type\ identifier} \lit* )
\end{mysyntdiag}
\begin{mysyntdiag}
\synt{component\ list} 
\[ \<[b] \synt{field\ definition} \\ \> \]
\[ 
  \<[b] 
    \( 
      \synt{method\ definition} \\
      \synt{property\ definition}
    \) \\ 
  \> 
\]
\end{mysyntdiag}
\begin{mysyntdiag}
\synt{field\ definition} \synt{identifier\ list} \lit*: \synt{type} \lit*;
\end{mysyntdiag}
\begin{mysyntdiag}
\synt{method\ definition} 
\( 
\[
\lit*{class}
\]
\(
\synt{function\ header} \\
\synt{procedure\ header}
\) \\
\synt{constructor\ header} \\
\synt{desctuctor\ header}
\)
\lit*;
\[
  \( \lit*{virtual} \[ \lit*; \lit*{abstract} \]  \\
     \lit*{override} \\
     \lit*{message} 
      \( \synt{integer\ constant} \\
         \synt{string\ constant} \)
  \) 
\lit*;
\]
\[ \synt{call\ modifiers} \lit*; \]
\end{mysyntdiag}
\begin{mysyntdiag}
\synt{class\ visibility\ specifier}
\( 
\lit*{private}\\
\lit*{protected}\\
\lit*{public}\\
\lit*{published}
\)
\end{mysyntdiag}
\end{diagram}
