%% File generated by the BNF Converter. \batchmode \documentclass[a4paper,11pt]{article} \usepackage[T1]{fontenc} \usepackage[utf8x]{inputenc} \setlength{\parindent}{0mm} \setlength{\parskip}{1mm} \title{The Language Java} \author{BNF-converter} \begin{document} \maketitle \newcommand{\emptyP}{\mbox{$\epsilon$}} \newcommand{\terminal}[1]{\mbox{{\texttt {#1}}}} \newcommand{\nonterminal}[1]{\mbox{$\langle \mbox{{\sl #1 }} \! \rangle$}} \newcommand{\arrow}{\mbox{::=}} \newcommand{\delimit}{\mbox{$|$}} \newcommand{\reserved}[1]{\mbox{{\texttt {#1}}}} \newcommand{\literal}[1]{\mbox{{\texttt {#1}}}} \newcommand{\symb}[1]{\mbox{{\texttt {#1}}}} This document was automatically generated by the {\em BNF-Converter}. \section*{The lexical structure of Java} \subsection*{Literals} Double-precision float literals \nonterminal{Double}\ have the structure indicated by the regular expression $\nonterminal{digit}+ \mbox{{\it `.'}} \nonterminal{digit}+ (\mbox{{\it `e'}} \mbox{{\it `-'}}? \nonterminal{digit}+)?$ i.e.\ two sequences of digits separated by a decimal point, optionally followed by an unsigned or negative exponent. Integer literals \nonterminal{Int}\ are nonempty sequences of digits. String literals \nonterminal{String}\ have the form \terminal{"}$x$\terminal{"}, where $x$ is any sequence of any characters except \terminal{"}\ unless preceded by \verb6\6. HexLong literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`x'} \mid \mbox{`X'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'})+ (\mbox{`l'} \mid \mbox{`L'})\) HexUnsLong literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`x'} \mid \mbox{`X'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'})+ ((\mbox{`u'}) (\mbox{`l'}) \mid (\mbox{`U'}) (\mbox{`L'}))\) HexUnsigned literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`x'} \mid \mbox{`X'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'})+ (\mbox{`u'} \mid \mbox{`U'})\) Hexadecimal literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`x'} \mid \mbox{`X'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'})+\) Ident literals are recognized by the regular expression \(({\nonterminal{lower}} \mid {\nonterminal{upper}}) ({\nonterminal{upper}} \mid {\nonterminal{lower}} \mid {\nonterminal{digit}} \mid \mbox{`\_'} \mid \mbox{`''})*\) JChar literals are recognized by the regular expression \((\mbox{`''}) ({\nonterminal{anychar}} - \mbox{`''} \mid \mbox{`$\backslash$'} \mid (\mbox{`$\backslash$'}) (\mbox{`''} \mid \mbox{`$\backslash$'} \mid \mbox{`n'} \mid \mbox{`t'} \mid \mbox{`r'})) (\mbox{`''})\) JDouble literals are recognized by the regular expression \((({\nonterminal{digit}})+ (\mbox{`.'}) \mid (\mbox{`.'}) ({\nonterminal{digit}})+) ((\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+)? \mid ({\nonterminal{digit}})+ (\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+ \mid ({\nonterminal{digit}})+ (\mbox{`.'}) ({\nonterminal{digit}})+ (\mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+\) JFloat literals are recognized by the regular expression \((({\nonterminal{digit}})+ (\mbox{`.'}) ({\nonterminal{digit}})+ \mid ({\nonterminal{digit}})+ (\mbox{`.'}) \mid (\mbox{`.'}) ({\nonterminal{digit}})+) ((\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+)? (\mbox{`f'} \mid \mbox{`F'}) \mid ({\nonterminal{digit}})+ (\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+ (\mbox{`f'} \mid \mbox{`F'})\) JLongDouble literals are recognized by the regular expression \((({\nonterminal{digit}})+ (\mbox{`.'}) ({\nonterminal{digit}})+ \mid ({\nonterminal{digit}})+ (\mbox{`.'}) \mid (\mbox{`.'}) ({\nonterminal{digit}})+) ((\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+)? (\mbox{`l'} \mid \mbox{`L'}) \mid ({\nonterminal{digit}})+ (\mbox{`e'} \mid \mbox{`E'}) (\mbox{`{$-$}'})? ({\nonterminal{digit}})+ (\mbox{`l'} \mid \mbox{`L'})\) Long literals are recognized by the regular expression \((\mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'} \mid \mbox{`8'} \mid \mbox{`9'}) ({\nonterminal{digit}})* (\mbox{`l'} \mid \mbox{`L'})\) Octal literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`0'} \mid \mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'})*\) OctalLong literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`0'} \mid \mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'})* (\mbox{`l'} \mid \mbox{`L'})\) OctalUnsLong literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`0'} \mid \mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'})* ((\mbox{`u'}) (\mbox{`l'}) \mid (\mbox{`U'}) (\mbox{`L'}))\) OctalUnsigned literals are recognized by the regular expression \((\mbox{`0'}) (\mbox{`0'} \mid \mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'})* (\mbox{`u'} \mid \mbox{`U'})\) UnicodeChar literals are recognized by the regular expression \((\mbox{`''}) (\mbox{`$\backslash$'}) (\mbox{`u'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'}) ({\nonterminal{digit}} \mid \mbox{`a'} \mid \mbox{`b'} \mid \mbox{`c'} \mid \mbox{`d'} \mid \mbox{`e'} \mid \mbox{`f'} \mid \mbox{`A'} \mid \mbox{`B'} \mid \mbox{`C'} \mid \mbox{`D'} \mid \mbox{`E'} \mid \mbox{`F'}) (\mbox{`''})\) Unsigned literals are recognized by the regular expression \((\mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'} \mid \mbox{`8'} \mid \mbox{`9'}) ({\nonterminal{digit}})* (\mbox{`u'} \mid \mbox{`U'})\) UnsignedLong literals are recognized by the regular expression \((\mbox{`1'} \mid \mbox{`2'} \mid \mbox{`3'} \mid \mbox{`4'} \mid \mbox{`5'} \mid \mbox{`6'} \mid \mbox{`7'} \mid \mbox{`8'} \mid \mbox{`9'}) ({\nonterminal{digit}})* ((\mbox{`u'}) (\mbox{`l'}) \mid (\mbox{`U'}) (\mbox{`L'}))\) \subsection*{Reserved words and symbols} The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions. The reserved words used in Java are the following: \\ \begin{tabular}{lll} {\reserved{abstract}} & {\reserved{boolean}} & {\reserved{break}} \\ {\reserved{byte}} & {\reserved{case}} & {\reserved{catch}} \\ {\reserved{char}} & {\reserved{class}} & {\reserved{continue}} \\ {\reserved{default}} & {\reserved{do}} & {\reserved{double}} \\ {\reserved{else}} & {\reserved{extends}} & {\reserved{false}} \\ {\reserved{final}} & {\reserved{finally}} & {\reserved{float}} \\ {\reserved{for}} & {\reserved{if}} & {\reserved{implements}} \\ {\reserved{import}} & {\reserved{instanceof}} & {\reserved{int}} \\ {\reserved{interface}} & {\reserved{long}} & {\reserved{native}} \\ {\reserved{new}} & {\reserved{null}} & {\reserved{package}} \\ {\reserved{private}} & {\reserved{protected}} & {\reserved{public}} \\ {\reserved{return}} & {\reserved{short}} & {\reserved{static}} \\ {\reserved{super}} & {\reserved{switch}} & {\reserved{synchronized}} \\ {\reserved{this}} & {\reserved{throw}} & {\reserved{throws}} \\ {\reserved{transient}} & {\reserved{true}} & {\reserved{try}} \\ {\reserved{volatile}} & {\reserved{while}} & \\ \end{tabular} \\ The symbols used in Java are the following: \\ \begin{tabular}{lll} {\symb{!}} & {\symb{!{$=$}}} & {\symb{\%}} \\ {\symb{\%{$=$}}} & {\symb{\&}} & {\symb{\&\&}} \\ {\symb{\&{$=$}}} & {\symb{(}} & {\symb{)}} \\ {\symb{*}} & {\symb{*{$=$}}} & {\symb{{$+$}}} \\ {\symb{{$+$}{$+$}}} & {\symb{{$+$}{$=$}}} & {\symb{,}} \\ {\symb{{$-$}}} & {\symb{{$-$}{$-$}}} & {\symb{{$-$}{$=$}}} \\ {\symb{.}} & {\symb{.*}} & {\symb{.class}} \\ {\symb{.this}} & {\symb{/}} & {\symb{/{$=$}}} \\ {\symb{:}} & {\symb{;}} & {\symb{{$<$}}} \\ {\symb{{$<$}{$<$}}} & {\symb{{$<$}{$<$}{$=$}}} & {\symb{{$<$}{$=$}}} \\ {\symb{{$=$}}} & {\symb{{$=$}{$=$}}} & {\symb{{$>$}}} \\ {\symb{{$>$}{$=$}}} & {\symb{{$>$}{$>$}}} & {\symb{{$>$}{$>$}{$=$}}} \\ {\symb{{$>$}{$>$}{$>$}}} & {\symb{{$>$}{$>$}{$>$}{$=$}}} & {\symb{?}} \\ {\symb{[}} & {\symb{[]}} & {\symb{]}} \\ {\symb{{\textasciicircum}}} & {\symb{{\textasciicircum}{$=$}}} & {\symb{else if}} \\ {\symb{\{}} & {\symb{{$|$}}} & {\symb{{$|$}{$=$}}} \\ {\symb{{$|$}{$|$}}} & {\symb{\}}} & {\symb{\~{}}} \\ \end{tabular} \\ \subsection*{Comments} Single-line comments begin with {\symb{//}}. Multiple-line comments are enclosed with {\symb{/*}} and {\symb{*/}}. \section*{The syntactic structure of Java} Non-terminals are enclosed between $\langle$ and $\rangle$. The symbols {\arrow} (production), {\delimit} (union) and {\emptyP} (empty rule) belong to the BNF notation. All other symbols are terminals.\\ \begin{tabular}{lll} {\nonterminal{Args}} & {\arrow} &{\terminal{(}} {\nonterminal{ListExp}} {\terminal{)}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ArrAcc}} & {\arrow} &{\nonterminal{ListIdent}} {\terminal{[}} {\nonterminal{Exp}} {\terminal{]}} \\ & {\delimit} &{\nonterminal{SpecExp}} {\terminal{[}} {\nonterminal{Exp}} {\terminal{]}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ArrayInits}} & {\arrow} &{\nonterminal{ArrayInits}} {\terminal{,}} {\nonterminal{VariableInits}} \\ & {\delimit} &{\nonterminal{VariableInits}} \\ & {\delimit} &{\nonterminal{ArrayInits}} {\terminal{,}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Assignment-op}} & {\arrow} &{\terminal{{$=$}}} \\ & {\delimit} &{\terminal{{$+$}{$=$}}} \\ & {\delimit} &{\terminal{\&{$=$}}} \\ & {\delimit} &{\terminal{/{$=$}}} \\ & {\delimit} &{\terminal{{$<$}{$<$}{$=$}}} \\ & {\delimit} &{\terminal{\%{$=$}}} \\ & {\delimit} &{\terminal{*{$=$}}} \\ & {\delimit} &{\terminal{{$|$}{$=$}}} \\ & {\delimit} &{\terminal{{$>$}{$>$}{$=$}}} \\ & {\delimit} &{\terminal{{$-$}{$=$}}} \\ & {\delimit} &{\terminal{{$>$}{$>$}{$>$}{$=$}}} \\ & {\delimit} &{\terminal{{\textasciicircum}{$=$}}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{BasicType}} & {\arrow} &{\terminal{boolean}} \\ & {\delimit} &{\terminal{byte}} \\ & {\delimit} &{\terminal{char}} \\ & {\delimit} &{\terminal{double}} \\ & {\delimit} &{\terminal{float}} \\ & {\delimit} &{\terminal{int}} \\ & {\delimit} &{\terminal{long}} \\ & {\delimit} &{\terminal{short}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Body}} & {\arrow} &{\terminal{\{}} {\nonterminal{ListLVarStatement}} {\terminal{\}}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{BracketsOpt}} & {\arrow} &{\terminal{[]}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Catch}} & {\arrow} &{\terminal{catch}} {\terminal{(}} {\nonterminal{TypeSpec}} {\nonterminal{Ident}} {\terminal{)}} {\nonterminal{Body}} \\ & {\delimit} &{\terminal{catch}} {\terminal{(}} {\nonterminal{TypeSpec}} {\terminal{)}} {\nonterminal{Body}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ClassHeader}} & {\arrow} &{\nonterminal{ListModifier}} {\terminal{class}} {\nonterminal{Ident}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{class}} {\nonterminal{Ident}} {\terminal{extends}} {\nonterminal{ListTypeName}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{class}} {\nonterminal{Ident}} {\terminal{extends}} {\nonterminal{ListTypeName}} {\terminal{implements}} {\nonterminal{ListTypeName}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{class}} {\nonterminal{Ident}} {\terminal{implements}} {\nonterminal{ListTypeName}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{interface}} {\nonterminal{Ident}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{interface}} {\nonterminal{Ident}} {\terminal{extends}} {\nonterminal{ListTypeName}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{interface}} {\nonterminal{Ident}} {\terminal{extends}} {\nonterminal{ListTypeName}} {\terminal{implements}} {\nonterminal{ListTypeName}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\terminal{interface}} {\nonterminal{Ident}} {\terminal{implements}} {\nonterminal{ListTypeName}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Constant}} & {\arrow} &{\nonterminal{JDouble}} \\ & {\delimit} &{\nonterminal{JFloat}} \\ & {\delimit} &{\nonterminal{JChar}} \\ & {\delimit} &{\nonterminal{JLongDouble}} \\ & {\delimit} &{\nonterminal{Double}} \\ & {\delimit} &{\terminal{false}} \\ & {\delimit} &{\nonterminal{Double}} \\ & {\delimit} &{\nonterminal{Hexadecimal}} \\ & {\delimit} &{\nonterminal{HexLong}} \\ & {\delimit} &{\nonterminal{HexUnsigned}} \\ & {\delimit} &{\nonterminal{HexUnsLong}} \\ & {\delimit} &{\nonterminal{Integer}} \\ & {\delimit} &{\nonterminal{Long}} \\ & {\delimit} &{\nonterminal{Integer}} \\ & {\delimit} &{\nonterminal{Octal}} \\ & {\delimit} &{\nonterminal{OctalLong}} \\ & {\delimit} &{\nonterminal{OctalUnsigned}} \\ & {\delimit} &{\nonterminal{OctalUnsLong}} \\ & {\delimit} &{\terminal{true}} \\ & {\delimit} &{\nonterminal{UnicodeChar}} \\ & {\delimit} &{\nonterminal{Unsigned}} \\ & {\delimit} &{\nonterminal{UnsignedLong}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{DeclaratorName}} & {\arrow} &{\nonterminal{Ident}} {\nonterminal{ListBracketsOpt}} \\ & {\delimit} &{\nonterminal{Ident}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{DimExpr}} & {\arrow} &{\terminal{[}} {\nonterminal{Exp}} {\terminal{]}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ElseIfStm}} & {\arrow} &{\terminal{else if}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Stm}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp}} & {\arrow} &{\nonterminal{Exp14}} {\nonterminal{Assignment-op}} {\nonterminal{Exp}} \\ & {\delimit} &{\nonterminal{Exp14}} {\terminal{instanceof}} {\nonterminal{TypeName}} \\ & {\delimit} &{\nonterminal{Exp1}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{FieldAcc}} & {\arrow} &{\nonterminal{ListIdent}} {\terminal{.class}} \\ & {\delimit} &{\nonterminal{BasicType}} {\terminal{.class}} \\ & {\delimit} &{\nonterminal{ListIdent}} {\terminal{.this}} \\ & {\delimit} &{\nonterminal{SpecExp}} {\terminal{.}} {\nonterminal{Ident}} \\ & {\delimit} &{\nonterminal{NewAlloc}} {\terminal{.}} {\nonterminal{Ident}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{FieldDeclaration}} & {\arrow} &{\nonterminal{Body}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\nonterminal{Ident}} {\terminal{(}} {\nonterminal{ListParameter}} {\terminal{)}} {\nonterminal{Body}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\nonterminal{Ident}} {\terminal{(}} {\nonterminal{ListParameter}} {\terminal{)}} {\terminal{throws}} {\nonterminal{ListTypeName}} {\nonterminal{Body}} \\ & {\delimit} &{\nonterminal{TypeDeclaration}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\nonterminal{TypeSpec}} {\nonterminal{MethodDecl}} {\nonterminal{MethodBody}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\nonterminal{TypeSpec}} {\nonterminal{MethodDecl}} {\terminal{throws}} {\nonterminal{ListTypeName}} {\nonterminal{MethodBody}} \\ & {\delimit} &{\nonterminal{ListModifier}} {\nonterminal{TypeSpec}} {\nonterminal{ListVarDecl}} {\terminal{;}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ForInit}} & {\arrow} &{\nonterminal{TypeSpec}} {\nonterminal{ListVarDecl}} {\terminal{;}} \\ & {\delimit} &{\terminal{final}} {\nonterminal{TypeSpec}} {\nonterminal{ListVarDecl}} {\terminal{;}} \\ & {\delimit} &{\nonterminal{ListExp}} {\terminal{;}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{GuardStm}} & {\arrow} &{\terminal{synchronized}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Body}} \\ & {\delimit} &{\terminal{try}} {\nonterminal{Body}} {\nonterminal{ListCatch}} \\ & {\delimit} &{\terminal{try}} {\nonterminal{Body}} {\nonterminal{ListCatch}} {\terminal{finally}} {\nonterminal{Body}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Import}} & {\arrow} &{\terminal{import}} {\nonterminal{ListIdent}} {\terminal{.*}} {\nonterminal{ListSemi}} \\ & {\delimit} &{\terminal{import}} {\nonterminal{ListIdent}} {\nonterminal{ListSemi}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{IterStm}} & {\arrow} &{\terminal{do}} {\nonterminal{Stm}} {\terminal{while}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} \\ & {\delimit} &{\terminal{for}} {\terminal{(}} {\nonterminal{ForInit}} {\nonterminal{ListExp}} {\terminal{;}} {\nonterminal{ListExp}} {\terminal{)}} {\nonterminal{Stm}} \\ & {\delimit} &{\terminal{while}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Stm}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{JumpStm}} & {\arrow} &{\terminal{break}} {\terminal{;}} \\ & {\delimit} &{\terminal{break}} {\nonterminal{Ident}} {\terminal{;}} \\ & {\delimit} &{\terminal{continue}} {\terminal{;}} \\ & {\delimit} &{\terminal{continue}} {\nonterminal{Ident}} {\terminal{;}} \\ & {\delimit} &{\terminal{return}} {\terminal{;}} \\ & {\delimit} &{\terminal{return}} {\nonterminal{Exp}} {\terminal{;}} \\ & {\delimit} &{\terminal{throw}} {\nonterminal{Exp}} {\terminal{;}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{LVarStatement}} & {\arrow} &{\nonterminal{TypeSpec}} {\nonterminal{ListVarDecl}} {\terminal{;}} \\ & {\delimit} &{\terminal{final}} {\nonterminal{TypeSpec}} {\nonterminal{ListVarDecl}} {\terminal{;}} \\ & {\delimit} &{\nonterminal{Stm}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{MethodBody}} & {\arrow} &{\terminal{;}} \\ & {\delimit} &{\nonterminal{Body}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{MethodDecl}} & {\arrow} &{\nonterminal{DeclaratorName}} {\terminal{(}} {\nonterminal{ListParameter}} {\terminal{)}} \\ & {\delimit} &{\nonterminal{MethodDecl}} {\nonterminal{BracketsOpt}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Modifier}} & {\arrow} &{\terminal{abstract}} \\ & {\delimit} &{\terminal{final}} \\ & {\delimit} &{\terminal{native}} \\ & {\delimit} &{\terminal{private}} \\ & {\delimit} &{\terminal{protected}} \\ & {\delimit} &{\terminal{public}} \\ & {\delimit} &{\terminal{static}} \\ & {\delimit} &{\terminal{synchronized}} \\ & {\delimit} &{\terminal{transient}} \\ & {\delimit} &{\terminal{volatile}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{MthCall}} & {\arrow} &{\nonterminal{ListIdent}} {\nonterminal{Args}} \\ & {\delimit} &{\nonterminal{SpecExpNP}} {\nonterminal{Args}} \\ & {\delimit} &{\nonterminal{SpecName}} {\nonterminal{Args}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{NewAlloc}} & {\arrow} &{\terminal{new}} {\nonterminal{TypeName}} {\nonterminal{ListDimExpr}} \\ & {\delimit} &{\terminal{new}} {\nonterminal{TypeName}} {\nonterminal{ListDimExpr}} {\terminal{\{}} {\terminal{\}}} \\ & {\delimit} &{\terminal{new}} {\nonterminal{TypeName}} {\nonterminal{ListDimExpr}} {\terminal{\{}} {\nonterminal{ArrayInits}} {\terminal{\}}} \\ & {\delimit} &{\terminal{new}} {\nonterminal{TypeName}} {\nonterminal{Args}} \\ & {\delimit} &{\terminal{new}} {\nonterminal{TypeName}} {\nonterminal{Args}} {\terminal{\{}} {\nonterminal{ListFieldDeclaration}} {\terminal{\}}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Parameter}} & {\arrow} &{\nonterminal{TypeSpec}} {\nonterminal{DeclaratorName}} \\ & {\delimit} &{\terminal{final}} {\nonterminal{TypeSpec}} {\nonterminal{DeclaratorName}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ProgramFile}} & {\arrow} &{\nonterminal{ListImport}} {\nonterminal{ListTypeDeclaration}} \\ & {\delimit} &{\terminal{package}} {\nonterminal{ListIdent}} {\nonterminal{ListSemi}} {\nonterminal{ListImport}} {\nonterminal{ListTypeDeclaration}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{SelectionStm}} & {\arrow} &{\terminal{if}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Stm}} {\nonterminal{ListElseIfStm}} {\terminal{else}} {\nonterminal{Stm}} \\ & {\delimit} &{\terminal{if}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Stm}} {\nonterminal{ListElseIfStm}} \\ & {\delimit} &{\terminal{switch}} {\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Body}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Semi}} & {\arrow} &{\terminal{;}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{SpecExp}} & {\arrow} &{\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} \\ & {\delimit} &{\nonterminal{SpecExpNP}} \\ & {\delimit} &{\nonterminal{SpecName}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{SpecExpNP}} & {\arrow} &{\nonterminal{Constant}} \\ & {\delimit} &{\nonterminal{ArrAcc}} \\ & {\delimit} &{\nonterminal{FieldAcc}} \\ & {\delimit} &{\nonterminal{MthCall}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{SpecName}} & {\arrow} &{\terminal{null}} \\ & {\delimit} &{\terminal{super}} \\ & {\delimit} &{\terminal{this}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Stm}} & {\arrow} &{\terminal{case}} {\nonterminal{Exp}} {\terminal{:}} \\ & {\delimit} &{\terminal{default}} {\terminal{:}} \\ & {\delimit} &{\nonterminal{Exp}} {\terminal{;}} \\ & {\delimit} &{\nonterminal{GuardStm}} \\ & {\delimit} &{\nonterminal{IterStm}} \\ & {\delimit} &{\nonterminal{JumpStm}} \\ & {\delimit} &{\terminal{\{}} {\nonterminal{ListLVarStatement}} {\terminal{\}}} \\ & {\delimit} &{\nonterminal{Ident}} {\terminal{:}} \\ & {\delimit} &{\nonterminal{SelectionStm}} \\ & {\delimit} &{\terminal{;}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{TypeDeclaration}} & {\arrow} &{\nonterminal{ClassHeader}} {\terminal{\{}} {\nonterminal{ListFieldDeclaration}} {\terminal{\}}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{TypeName}} & {\arrow} &{\nonterminal{BasicType}} \\ & {\delimit} &{\nonterminal{ListIdent}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{TypeSpec}} & {\arrow} &{\nonterminal{TypeName}} {\nonterminal{ListBracketsOpt}} \\ & {\delimit} &{\nonterminal{TypeName}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Unary-operator}} & {\arrow} &{\terminal{\~{}}} \\ & {\delimit} &{\terminal{!}} \\ & {\delimit} &{\terminal{{$-$}}} \\ & {\delimit} &{\terminal{{$+$}}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{VarDecl}} & {\arrow} &{\nonterminal{Ident}} \\ & {\delimit} &{\nonterminal{DeclaratorName}} {\terminal{{$=$}}} {\nonterminal{VariableInits}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{VariableInits}} & {\arrow} &{\terminal{\{}} {\nonterminal{ArrayInits}} {\terminal{\}}} \\ & {\delimit} &{\terminal{\{}} {\terminal{\}}} \\ & {\delimit} &{\nonterminal{Exp}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListIdent}} & {\arrow} &{\nonterminal{Ident}} \\ & {\delimit} &{\nonterminal{Ident}} {\terminal{.}} {\nonterminal{ListIdent}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListBracketsOpt}} & {\arrow} &{\nonterminal{BracketsOpt}} \\ & {\delimit} &{\nonterminal{BracketsOpt}} {\nonterminal{ListBracketsOpt}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListCatch}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Catch}} {\nonterminal{ListCatch}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListDimExpr}} & {\arrow} &{\nonterminal{DimExpr}} \\ & {\delimit} &{\nonterminal{DimExpr}} {\nonterminal{ListDimExpr}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListElseIfStm}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{ElseIfStm}} {\nonterminal{ListElseIfStm}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListExp}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Exp}} \\ & {\delimit} &{\nonterminal{Exp}} {\terminal{,}} {\nonterminal{ListExp}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListFieldDeclaration}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{FieldDeclaration}} {\nonterminal{ListFieldDeclaration}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListImport}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Import}} {\nonterminal{ListImport}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListLVarStatement}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{LVarStatement}} {\nonterminal{ListLVarStatement}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListModifier}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Modifier}} {\nonterminal{ListModifier}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListParameter}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Parameter}} \\ & {\delimit} &{\nonterminal{Parameter}} {\terminal{,}} {\nonterminal{ListParameter}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListSemi}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{Semi}} {\nonterminal{ListSemi}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListTypeDeclaration}} & {\arrow} &{\emptyP} \\ & {\delimit} &{\nonterminal{TypeDeclaration}} {\nonterminal{ListTypeDeclaration}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListTypeName}} & {\arrow} &{\nonterminal{TypeName}} \\ & {\delimit} &{\nonterminal{TypeName}} {\terminal{,}} {\nonterminal{ListTypeName}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{ListVarDecl}} & {\arrow} &{\nonterminal{VarDecl}} \\ & {\delimit} &{\nonterminal{VarDecl}} {\terminal{,}} {\nonterminal{ListVarDecl}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp1}} & {\arrow} &{\nonterminal{Exp2}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp2}} & {\arrow} &{\nonterminal{Exp3}} {\terminal{?}} {\nonterminal{Exp}} {\terminal{:}} {\nonterminal{Exp2}} \\ & {\delimit} &{\nonterminal{Exp3}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp3}} & {\arrow} &{\nonterminal{Exp3}} {\terminal{{$|$}{$|$}}} {\nonterminal{Exp4}} \\ & {\delimit} &{\nonterminal{Exp4}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp4}} & {\arrow} &{\nonterminal{Exp4}} {\terminal{\&\&}} {\nonterminal{Exp5}} \\ & {\delimit} &{\nonterminal{Exp5}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp5}} & {\arrow} &{\nonterminal{Exp5}} {\terminal{{$|$}}} {\nonterminal{Exp6}} \\ & {\delimit} &{\nonterminal{Exp6}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp6}} & {\arrow} &{\nonterminal{Exp6}} {\terminal{{\textasciicircum}}} {\nonterminal{Exp7}} \\ & {\delimit} &{\nonterminal{Exp7}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp7}} & {\arrow} &{\nonterminal{Exp7}} {\terminal{\&}} {\nonterminal{Exp8}} \\ & {\delimit} &{\nonterminal{Exp8}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp8}} & {\arrow} &{\nonterminal{Exp8}} {\terminal{{$=$}{$=$}}} {\nonterminal{Exp9}} \\ & {\delimit} &{\nonterminal{Exp8}} {\terminal{!{$=$}}} {\nonterminal{Exp9}} \\ & {\delimit} &{\nonterminal{Exp9}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp9}} & {\arrow} &{\nonterminal{Exp9}} {\terminal{{$>$}{$=$}}} {\nonterminal{Exp10}} \\ & {\delimit} &{\nonterminal{Exp9}} {\terminal{{$>$}}} {\nonterminal{Exp10}} \\ & {\delimit} &{\nonterminal{Exp9}} {\terminal{{$<$}{$=$}}} {\nonterminal{Exp10}} \\ & {\delimit} &{\nonterminal{Exp9}} {\terminal{{$<$}}} {\nonterminal{Exp10}} \\ & {\delimit} &{\nonterminal{Exp10}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp10}} & {\arrow} &{\nonterminal{Exp10}} {\terminal{{$<$}{$<$}}} {\nonterminal{Exp11}} \\ & {\delimit} &{\nonterminal{Exp10}} {\terminal{{$>$}{$>$}}} {\nonterminal{Exp11}} \\ & {\delimit} &{\nonterminal{Exp10}} {\terminal{{$>$}{$>$}{$>$}}} {\nonterminal{Exp11}} \\ & {\delimit} &{\nonterminal{Exp11}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp11}} & {\arrow} &{\nonterminal{Exp11}} {\terminal{{$-$}}} {\nonterminal{Exp12}} \\ & {\delimit} &{\nonterminal{Exp11}} {\terminal{{$+$}}} {\nonterminal{Exp12}} \\ & {\delimit} &{\nonterminal{Exp12}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp12}} & {\arrow} &{\nonterminal{Exp12}} {\terminal{/}} {\nonterminal{Exp13}} \\ & {\delimit} &{\nonterminal{Exp12}} {\terminal{\%}} {\nonterminal{Exp13}} \\ & {\delimit} &{\nonterminal{Exp12}} {\terminal{*}} {\nonterminal{Exp13}} \\ & {\delimit} &{\nonterminal{Exp13}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp13}} & {\arrow} &{\terminal{(}} {\nonterminal{ListIdent}} {\nonterminal{ListBracketsOpt}} {\terminal{)}} {\nonterminal{Exp13}} \\ & {\delimit} &{\terminal{(}} {\nonterminal{BasicType}} {\terminal{)}} {\nonterminal{Exp13}} \\ & {\delimit} &{\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} {\nonterminal{Exp15}} \\ & {\delimit} &{\nonterminal{Exp14}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp14}} & {\arrow} &{\terminal{{$-$}{$-$}}} {\nonterminal{Exp14}} \\ & {\delimit} &{\terminal{{$+$}{$+$}}} {\nonterminal{Exp14}} \\ & {\delimit} &{\nonterminal{Unary-operator}} {\nonterminal{Exp13}} \\ & {\delimit} &{\nonterminal{Exp15}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp15}} & {\arrow} &{\nonterminal{Exp15}} {\terminal{{$-$}{$-$}}} \\ & {\delimit} &{\nonterminal{Exp15}} {\terminal{{$+$}{$+$}}} \\ & {\delimit} &{\nonterminal{Exp16}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp16}} & {\arrow} &{\nonterminal{ArrAcc}} \\ & {\delimit} &{\nonterminal{Constant}} \\ & {\delimit} &{\nonterminal{FieldAcc}} \\ & {\delimit} &{\nonterminal{MthCall}} \\ & {\delimit} &{\nonterminal{SpecName}} \\ & {\delimit} &{\nonterminal{String}} \\ & {\delimit} &{\nonterminal{Exp17}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp17}} & {\arrow} &{\nonterminal{NewAlloc}} \\ & {\delimit} &{\nonterminal{Exp18}} \\ \end{tabular} \\ \begin{tabular}{lll} {\nonterminal{Exp18}} & {\arrow} &{\nonterminal{ListIdent}} \\ & {\delimit} &{\terminal{(}} {\nonterminal{Exp}} {\terminal{)}} \\ \end{tabular} \\ \end{document}