Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \section{Zpracovaní lexemů potřebných ke konstrukci case}
- Klíčová slova: kwCASE, kwOF se zpracovávají obdobně jako ostatní klíčová slova.
- Lexém DOUBLEDOT viz zpracovaní DOT
- \chapter{Syntaktický analyzátor}\label{parser}
- \section{Atributová gramatika}\label{parser-gramatika}
- Pozn.: Gramatika zahrnuje pouze přidaná či upravená pravidla\\
- \small
- \begin{tabular}{|l|l|}
- \hline
- Syntax pravidlo & Atributovaná pravidla \\
- \hline
- \textbf{DeklProm} $\rightarrow$ var ident \textbf{ZbDeklProm} ; & \textbf{ZbDeklProm}.dIdent=ident.name \\
- \hline
- \textbf{ZbDeklProm} $\rightarrow$ , ident \textbf{ZbDeklProm} & dekl(\textbf{ZbDeklProm}.dIdent)\\ &\textbf{ZbDeklProm}1.dIdent=ident.name \\
- \hline
- \textbf{ZbDeklProm} $\rightarrow$ : \textbf{ZbDeklColon} & \textbf{ZbDeklColon}.dIdent=\textbf{ZbDeklProm}.dIdent\\
- \hline
- \textbf{ZbDeklProm} $\rightarrow$ ; $\varepsilon$ & if(\textbf{ZbDeklProm}.ident!=NULL)\\& dekl(\textbf{zbDeklProm}.dIdent)\\
- \hline
- \textbf{ZbDeklColon} $\rightarrow$ Integer \textbf{ZbDeklProm} & \textbf{ZbDeklProm}.dIdent=NULL\\
- \hline
- \textbf{ZbDeklColon} $\rightarrow$ Record ident \textbf{ZbDeklStruct} & deklstruct(\textbf{ZbDeklColon}.dIdent)
- \\& deklStructMember(ident.name)
- \\& \textbf{ZbDeklStruc}t.dIdent=\textbf{ZbDeklColon}.dIdent \\
- \hline
- \textbf{ZbDeklStruct} $\rightarrow$ , ident \textbf{ZbDeklStruct} &
- deklStructMember(ident.name)\\& \textbf{ZbDeklStruct}1.dIdent=\textbf{ZbDeklStruct}0.dIdent \\
- \hline
- \textbf{ZbDeklStruct} $\rightarrow$ : Integer End \textbf{ZbDeklProm} & \textbf{ZbDeklProm}.dIdent=NULL\\
- \hline
- \textbf{Příkaz} $\rightarrow$ \textbf{IdentAssign} := \textbf{Výraz} & \\
- \hline
- \textbf{Příkaz} $\rightarrow$ case \textbf{CaseTelo} end & \\
- \hline
- \textbf{Faktor} $\rightarrow$ \textbf{IdentHodn} & \\
- \hline
- \textbf{IdentAssign} $\rightarrow$ ident\textbf{ZbIdentAssign} & \textbf{ZbIdentAssign}.dIdent=ident.name \\
- \hline
- \textbf{ZbIdentAssign} $\rightarrow$ .ident & \\
- \hline
- \textbf{ZbIdentAssign} $\rightarrow$ $\varepsilon$ & \\
- \hline
- \textbf{IdentHodn} $\rightarrow$ ident\textbf{ZbIdentHodn} & \textbf{ZbIdentHodn}.dIdent = ident.name \\
- \hline
- \textbf{ZbIdentHodn} $\rightarrow$ .ident & \\
- \hline
- \textbf{ZbIdentHodn} $\rightarrow$ $\varepsilon$ & \\
- \hline
- \textbf{CaseTelo} $\rightarrow$ \textbf{Výraz} of \textbf{ZbCase} \textbf{ZbElse} & ZbCase.dAdresy=Adresy.init\\&ZbElse.dAdresy = ZbCase.sAdresy \\
- \hline
- \textbf{ZbCase} $\rightarrow$ cislo \textbf{ZbCasePrikazy} \textbf{ZbCase}
- & commands(\textbf{ZbCase}0.dAdresy)\\& \textbf{ZbCasePrikazy}.dAdresy=\textbf{ZbCase}0.dAdresy
- \\& \textbf{ZbCase}1.dAdresy = \textbf{ZbCasePrikazy}.sAdresy \\&\textbf{ZbCase}0.sAdresy=\textbf{ZbCase}1.sAdresy \\
- \hline
- \textbf{ZbCase} $\rightarrow$ $\varepsilon$ & \textbf{ZbCase}.sAdresy=\textbf{ZbCase}.dAdresy\\
- \hline
- \textbf{ZbCasePrikazy} $\rightarrow$ : \textbf{PrikazyCase} &commands(\textbf{ZbCasePrikazy}.dAdresy)\\&
- \textbf{ZbCasePrikazy}.sAdresy=\textbf{ZbCasePrikazy}.dAdresy \\
- \hline
- \textbf{ZbCasePrikazy} $\rightarrow$ , cislo \textbf{ZbCasePrikazy}&commands(\textbf{ZbCasePrikazy}.dAdresy)\\&
- \textbf{ZbCasePrikazy}1.dAdresy=\textbf{ZbCasePrikazy}0.dAdresy\\&
- \textbf{ZbCasePrikazy}0.sAdresy=\textbf{ZbCasePrikazy}1.dAdresy \\
- \hline
- \textbf{ZbCasePrikazy} $\rightarrow$ ..cislo: \textbf{PrikazyCase} &commands(\textbf{ZbCasePrikazy}.dAdresy)\\&
- \textbf{ZbCasePrikazy}.sAdresy=\textbf{ZbCasePrikazy}.dAdresy\\
- \hline
- \textbf{ZbElse} $\rightarrow$ else \textbf{PrikazyCase} &commands(\textbf{ZbElse}.dAdresy)\\
- \hline
- \textbf{ZbElse} $\rightarrow$ $\varepsilon$ &commands(\textbf{ZbElse}.dAdresy)\\
- \hline
- \textbf{PrikazyCase} $\rightarrow$ \textbf{SlozPrikaz} & \\
- \hline
- \textbf{PrikazyCase} $\rightarrow$ \textbf{Prikaz} ; & \\
- \hline
- \end{tabular}
- \normalsize
- \clearpage
Advertisement
Add Comment
Please, Sign In to add comment