"locale" support + better uniformity in formating

This commit is contained in:
Roberto Ierusalimschy 1997-07-02 14:09:48 -03:00
parent 7820a47184
commit d56e3a6481
1 changed files with 55 additions and 42 deletions

View File

@ -1,8 +1,7 @@
% $Id: manual.tex,v 2.8 1997/06/27 22:38:49 roberto Exp roberto $ % $Id: manual.tex,v 2.9 1997/07/01 17:41:34 roberto Exp roberto $
\documentstyle[fullpage,11pt,bnf]{article} \documentstyle[fullpage,11pt,bnf]{article}
\newcommand{\rw}[1]{{\bf #1}}
\newcommand{\See}[1]{Section~\ref{#1}} \newcommand{\See}[1]{Section~\ref{#1}}
\newcommand{\see}[1]{(see \See{#1})} \newcommand{\see}[1]{(see \See{#1})}
\newcommand{\M}[1]{\emph{#1}} \newcommand{\M}[1]{\emph{#1}}
@ -39,7 +38,7 @@ Waldemar Celes
\tecgraf\ --- Computer Science Department --- PUC-Rio \tecgraf\ --- Computer Science Department --- PUC-Rio
} }
\date{\small \verb$Date: 1997/06/27 22:38:49 $} \date{\small \verb$Date: 1997/07/01 17:41:34 $}
\maketitle \maketitle
@ -167,14 +166,14 @@ Before the first assignment, the value of a global variable is \nil;
this default can be changed \see{tag-method}. this default can be changed \see{tag-method}.
The unit of execution of Lua is called a \Def{chunk}. The unit of execution of Lua is called a \Def{chunk}.
The syntax% The syntax for chunks is:
\footnote{As usual, \rep{\emph{a}} means 0 or more \emph{a}'s,
\opt{\emph{a}} means an optional \emph{a} and \oneormore{\emph{a}} means
one or more \emph{a}'s.}
for chunks is:
\begin{Produc} \begin{Produc}
\produc{chunk}{\rep{stat \Or function} \opt{ret}} \produc{chunk}{\rep{stat \Or function} \opt{ret}}
\end{Produc}% \end{Produc}%
(As usual, \rep{\emph{a}} means 0 or more \emph{a}'s,
\opt{\emph{a}} means an optional \emph{a} and \oneormore{\emph{a}} means
one or more \emph{a}'s.)
A chunk may contain statements and function definitions, A chunk may contain statements and function definitions,
and may be in a file or in a string inside the host program. and may be in a file or in a string inside the host program.
A chunk may optionally end with a \verb|return| statement \see{return}. A chunk may optionally end with a \verb|return| statement \see{return}.
@ -182,10 +181,10 @@ When a chunk is executed, first all its functions and statements are compiled,
then the statements are executed in sequential order. then the statements are executed in sequential order.
All modifications a chunk effects on the global environment persist All modifications a chunk effects on the global environment persist
after its end. after its end.
Those include modifications to global variables and definitions Those include modifications to global variables
of new functions% and definitions of new functions
\footnote{Actually, a function definition is an (actually, a function definition is an
assignment to a global variable \see{TypesSec}.}. assignment to a global variable \see{TypesSec}).
Chunks may be pre-compiled into binary form; Chunks may be pre-compiled into binary form;
see program \IndexVerb{luac} for details. see program \IndexVerb{luac} for details.
@ -207,7 +206,9 @@ There are six \Index{basic types} in Lua: \Def{nil}, \Def{number},
\emph{Nil} is the type of the value \nil, \emph{Nil} is the type of the value \nil,
whose main property is to be different from any other value. whose main property is to be different from any other value.
\emph{Number} represents real (floating-point) numbers, \emph{Number} represents real (floating-point) numbers,
while \emph{string} has the usual meaning. while \emph{string} has the usual meaning;
notice that Lua is \Index{eight-bit clean},
so strings can have ISO characters.
The function \verb|type| returns a string describing the type The function \verb|type| returns a string describing the type
of a given value \see{pdf-type}. of a given value \see{pdf-type}.
@ -275,9 +276,11 @@ This section describes the lexis, the syntax and the semantics of Lua.
\subsection{Lexical Conventions} \label{lexical} \subsection{Lexical Conventions} \label{lexical}
Lua is a case-sensitive language.
\Index{Identifiers} can be any string of letters, digits, and underscores, \Index{Identifiers} can be any string of letters, digits, and underscores,
not beginning with a digit. not beginning with a digit.
The definition of letter depends on the current locale:
Any character considered alphabetic by the current locale
can be used in an identifier.
The following words are reserved, and cannot be used as identifiers: The following words are reserved, and cannot be used as identifiers:
\index{reserved words} \index{reserved words}
\begin{verbatim} \begin{verbatim}
@ -286,6 +289,9 @@ The following words are reserved, and cannot be used as identifiers:
nil not or repeat nil not or repeat
return then until while return then until while
\end{verbatim} \end{verbatim}
Lua is a case-sensitive language:
\T{and} is a reserved word, but \T{And} and \T{\'and}
(if the locale permits) are two other different identifiers.
The following strings denote other \Index{tokens}: The following strings denote other \Index{tokens}:
\begin{verbatim} \begin{verbatim}
@ -307,9 +313,9 @@ other quoted strings.
\Index{Comments} start anywhere outside a string with a \Index{Comments} start anywhere outside a string with a
double hyphen (\verb|--|) and run until the end of the line. double hyphen (\verb|--|) and run until the end of the line.
Moreover, Moreover,
the first line of a chunk file is skipped if it starts with \verb|#|% the first line of a chunk file is skipped if it starts with \verb|#|.
\footnote{This facility allows the use of Lua as a script interpreter This facility allows the use of Lua as a script interpreter
in Unix systems \see{lua-sa}.}. in Unix systems \see{lua-sa}.
\Index{Numerical constants} may be written with an optional decimal part, \Index{Numerical constants} may be written with an optional decimal part,
and an optional decimal exponent. and an optional decimal exponent.
@ -325,9 +331,9 @@ The \verb|$| can be followed by any of the following directives:
\begin{description} \begin{description}
\item[\T{debug}] --- turn on some debugging facilities \see{pragma}. \item[\T{debug}] --- turn on some debugging facilities \see{pragma}.
\item[\T{nodebug}] --- turn off some debugging facilities \see{pragma}. \item[\T{nodebug}] --- turn off some debugging facilities \see{pragma}.
\item[{\tt if \M{cond}}] --- starts a conditional part. \item[\T{if \M{cond}}] --- starts a conditional part.
If \M{cond} is false, then this part is skipped by the lexical analyzer. If \M{cond} is false, then this part is skipped by the lexical analyzer.
\item[{\tt ifnot \M{cond}}] --- starts a conditional part. \item[\T{ifnot \M{cond}}] --- starts a conditional part.
If \M{cond} is true, then this part is skipped by the lexical analyzer. If \M{cond} is true, then this part is skipped by the lexical analyzer.
\item[\T{end}] --- ends a conditional part. \item[\T{end}] --- ends a conditional part.
\item[\T{else}] --- starts an ``else'' conditional part, \item[\T{else}] --- starts an ``else'' conditional part,
@ -439,9 +445,9 @@ an assignment \verb|x = val|, where \verb|x| is a global variable,
is equivalent to a call \verb|setglobal('x', val)|; is equivalent to a call \verb|setglobal('x', val)|;
an assignment \verb|t[i] = val| is equivalent to an assignment \verb|t[i] = val| is equivalent to
\verb|settable_event(t, i, val)|. \verb|settable_event(t, i, val)|.
See \See{tag-method} for a description of these functions% See \See{tag-method} for a description of these functions.
\footnote{Function \verb|setglobal| is pre-defined in Lua. (Function \verb|setglobal| is pre-defined in Lua.
Function \T{settable\_event} is used only for explanatory purposes.}. Function \T{settable\_event} is used only for explanatory purposes.)
The syntax \verb|var.NAME| is just syntactic sugar for The syntax \verb|var.NAME| is just syntactic sugar for
\verb|var["NAME"]|: \verb|var["NAME"]|:
@ -515,9 +521,9 @@ An access to a global variable \verb|x| is equivalent to a
call \verb|getglobal('x')|; call \verb|getglobal('x')|;
an access to an indexed variable \verb|t[i]| is equivalent to an access to an indexed variable \verb|t[i]| is equivalent to
a call \verb|gettable_event(t, i)|. a call \verb|gettable_event(t, i)|.
See \See{tag-method} for a description of these functions% See \See{tag-method} for a description of these functions.
\footnote{Function \verb|getglobal| is pre-defined in Lua. (Function \verb|getglobal| is pre-defined in Lua.
Function \T{gettable\_event} is used only for explanatory purposes.}. Function \T{gettable\_event} is used only for explanatory purposes.)
The non-terminal \M{exp1} is used to indicate that the values The non-terminal \M{exp1} is used to indicate that the values
returned by an expression must be adjusted to one single value: returned by an expression must be adjusted to one single value:
@ -563,9 +569,6 @@ If both arguments are numbers, then they are compared as such.
Otherwise, if both arguments are strings, Otherwise, if both arguments are strings,
their values are compared using lexicographical order. their values are compared using lexicographical order.
Otherwise, the ``order'' tag method is called \see{tag-method}. Otherwise, the ``order'' tag method is called \see{tag-method}.
%Note that the conversion rules of Section~\ref{coercion}
%do apply to order operators.
%Thus, \verb|"2">"12"| evaluates to true.
\subsubsection{Logical Operators} \subsubsection{Logical Operators}
Like control structures, all logical operators Like control structures, all logical operators
@ -1322,7 +1325,7 @@ The use of explicit nested blocks is strongly encouraged.
\subsection{Executing Lua Code} \subsection{Executing Lua Code}
A host program can execute Lua chunks written in a file or in a string A host program can execute Lua chunks written in a file or in a string
using the following functions:% using the following functions:
\Deffunc{lua_dofile}\Deffunc{lua_dostring} \Deffunc{lua_dofile}\Deffunc{lua_dostring}
\begin{verbatim} \begin{verbatim}
int lua_dofile (char *filename); int lua_dofile (char *filename);
@ -1967,7 +1970,7 @@ The following combinations are allowed in describing a character class:
\item[\T{\%U}] --- represents all non upper case letter characters. \item[\T{\%U}] --- represents all non upper case letter characters.
\item[\T{\%w}] --- represents all alphanumeric characters. \item[\T{\%w}] --- represents all alphanumeric characters.
\item[\T{\%W}] --- represents all non alphanumeric characters. \item[\T{\%W}] --- represents all non alphanumeric characters.
\item[{\tt \%\M{x}}] (where \M{x} is any non alphanumeric character) --- \item[\T{\%\M{x}}] (where \M{x} is any non alphanumeric character) ---
represents the character \M{x}. represents the character \M{x}.
This is the standard way to escape the magic characters \verb|()%.[*-?|. This is the standard way to escape the magic characters \verb|()%.[*-?|.
\item[\T{[char-set]}] --- \item[\T{[char-set]}] ---
@ -1976,17 +1979,21 @@ characters in char-set.
To include a \verb|]| in char-set, it must be the first character. To include a \verb|]| in char-set, it must be the first character.
A range of characters may be specified by A range of characters may be specified by
separating the end characters of the range with a \verb|-|; separating the end characters of the range with a \verb|-|;
e.g., \verb|A-Z| specifies the upper case characters. e.g., \verb|A-Z| specifies the English upper case characters.
If \verb|-| appears as the first or last character of char-set, If \verb|-| appears as the first or last character of char-set,
then it represents itself. then it represents itself.
All classes \verb|%|\emph{x} described above can also be used as All classes \verb|%|\emph{x} described above can also be used as
components in a char-set. components in a char-set.
All other characters in char-set represent themselves. All other characters in char-set represent themselves.
\item[{\tt [\^{ }char-set]}] --- \item[\T{[\^{ }char-set]}] ---
represents the complement of char-set, represents the complement of char-set,
where char-set is interpreted as above. where char-set is interpreted as above.
\end{description} \end{description}
The definitions of letter, space, etc depend on the current locale.
In particular, the class \verb|[a-z]| may not be equivalent to \verb|%l|.
The second form should be preferred for more portable programs.
\paragraph{Pattern Item:} \paragraph{Pattern Item:}
a \Def{pattern item} may be: a \Def{pattern item} may be:
\begin{itemize} \begin{itemize}
@ -2006,11 +2013,11 @@ these repetition items will always match the shortest possible sequence.
a single character class followed by \verb|?|, a single character class followed by \verb|?|,
which matches 0 or 1 occurrence of a character in the class; which matches 0 or 1 occurrence of a character in the class;
\item \item
{\tt \%\M{n}}, for \M{n} between 1 and 9; \T{\%\M{n}}, for \M{n} between 1 and 9;
such item matches a sub-string equal to the n-th captured string such item matches a sub-string equal to the n-th captured string
(see below); (see below);
\item \item
{\tt \%b\M{xy}}, where \M{x} and \M{y} are two distinct characters; \T{\%b\M{xy}}, where \M{x} and \M{y} are two distinct characters;
such item matches strings that start with \M{x}, end with \M{y}, such item matches strings that start with \M{x}, end with \M{y},
and where the \M{x} and \M{y} are \emph{balanced}. and where the \M{x} and \M{y} are \emph{balanced}.
That means that, if one reads the string from left to write, That means that, if one reads the string from left to write,
@ -2039,6 +2046,7 @@ stored as the first capture (and therefore has number 1);
the character matching \verb|.| is captured with number 2, the character matching \verb|.| is captured with number 2,
and the part matching \verb|%s*| has number 3. and the part matching \verb|%s*| has number 3.
\subsection{Mathematical Functions} \label{mathlib} \subsection{Mathematical Functions} \label{mathlib}
This library is an interface to some functions of the standard C math library. This library is an interface to some functions of the standard C math library.
@ -2101,8 +2109,6 @@ When called with a file name, it opens the named file,
sets its handle as the value of \verb|_INPUT|, sets its handle as the value of \verb|_INPUT|,
and returns this value. and returns this value.
It does not close the current input file. It does not close the current input file.
%When called with a file handle returned by a previous call,
%it simply assigns it to \verb|_INPUT|.
When called without parameters, When called without parameters,
it closes the \verb|_INPUT| file, it closes the \verb|_INPUT| file,
and restores \verb|stdin| as the value of \verb|_INPUT|. and restores \verb|stdin| as the value of \verb|_INPUT|.
@ -2130,8 +2136,6 @@ and returns this value.
It does not close the current output file. It does not close the current output file.
Notice that, if the file already exists, Notice that, if the file already exists,
then it will be \emph{completely erased} with this operation. then it will be \emph{completely erased} with this operation.
%When called with a file handle returned by a previous call,
%it restores the file as the current output.
When called without parameters, When called without parameters,
this function closes the \verb|_OUTPUT| file, this function closes the \verb|_OUTPUT| file,
and restores \verb|stdout| as the value of \verb|_OUTPUT|. and restores \verb|stdout| as the value of \verb|_OUTPUT|.
@ -2203,15 +2207,13 @@ from the input if it belongs to the class;
it never fails. it never fails.
A character class followed by \verb|*| reads until a character that A character class followed by \verb|*| reads until a character that
does not belong to the class, or end of file; does not belong to the class, or end of file;
since it can match a sequence of zero characters, it never fails.% since it can match a sequence of zero characters, it never fails.
\footnote{
Notice that the behavior of read patterns is different from Notice that the behavior of read patterns is different from
the regular pattern matching behavior, the regular pattern matching behavior,
where a \verb|*| expands to the maximum length \emph{such that} where a \verb|*| expands to the maximum length \emph{such that}
the rest of the pattern does not fail. the rest of the pattern does not fail.
With the read pattern behavior With the read pattern behavior
there is no need for backtracking the reading. there is no need for backtracking the reading.
}
A pattern item may contain sub-patterns enclosed in curly brackets, A pattern item may contain sub-patterns enclosed in curly brackets,
that describe \Def{skips}. that describe \Def{skips}.
@ -2270,6 +2272,17 @@ This function is equivalent to the C function \verb|system|.
It passes \verb|command| to be executed by an operating system shell. It passes \verb|command| to be executed by an operating system shell.
It returns an error code, which is system-dependent. It returns an error code, which is system-dependent.
\subsubsection*{\ff \T{setlocale (locale [, category])}}\Deffunc{setlocale}
This function is an interface to the ANSI C function \verb|setlocale|.
\verb|locale| is a string specifing a locale;
\verb|category| is a number describing which category to change:
0 is \verb|LC_ALL|, 1 is \verb|LC_COLLATE|, 2 is \verb|LC_CTYPE|,
3 is \verb|LC_MONETARY|, 4 is \verb|LC_NUMERIC|, and 5 is \verb|LC_TIME|;
the default category is \verb|LC_ALL|.
The function returns the name of the new locale,
or \nil\ if the request cannot be honored.
\section{The Debugger Interface} \label{debugI} \section{The Debugger Interface} \label{debugI}