Mercurial Hosting > luan
comparison website/src/m.html.luan @ 1656:540bf2343078
manual work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 05 Apr 2022 21:50:24 -0600 |
parents | |
children | 2968e43cdd44 |
comparison
equal
deleted
inserted
replaced
1655:de8e25c6d177 | 1656:540bf2343078 |
---|---|
1 local Luan = require "luan:Luan.luan" | |
2 local error = Luan.error | |
3 local Io = require "luan:Io.luan" | |
4 local Http = require "luan:http/Http.luan" | |
5 local Shared = require "site:/lib/Shared.luan" | |
6 local head = Shared.head or error() | |
7 local docs_header = Shared.docs_header or error() | |
8 local show_toc = Shared.show_toc or error() | |
9 local show_content = Shared.show_content or error() | |
10 | |
11 | |
12 local content = { | |
13 intro = { | |
14 title = "Introduction" | |
15 content = function() | |
16 %> | |
17 <p> | |
18 Luan is a high level programming language based on <a href="http://www.lua.org">Lua</a>. A great strength of Lua is its simplicity and Luan takes this even further, being even simpler than Lua. The goal is to provide a simple programming language for the casual programmer with as few concepts as possible so that one can quickly learn the language and then easily understand any code written in Luan. | |
19 </p> | |
20 | |
21 <p> | |
22 Luan is implemented in Java and is tightly coupled with Java. So it makes a great scripting language for Java programmers. | |
23 </p> | |
24 | |
25 <p> | |
26 Unlike Lua which is meant to be embedded, Luan is meant to be a full scripting language. This done not by adding features to Luan, but rather by providing a complete set of libraries. | |
27 </p> | |
28 <% | |
29 end | |
30 } | |
31 basic = { | |
32 title = "Basic Concepts" | |
33 content = function() | |
34 %> | |
35 <p> | |
36 This section describes the basic concepts of the language. | |
37 </p> | |
38 <% | |
39 end | |
40 subs = { | |
41 types = { | |
42 title = "Values and Types" | |
43 content = function() | |
44 %> | |
45 <p> | |
46 Luan is a <em>dynamically typed language</em>. | |
47 This means that | |
48 variables do not have types; only values do. | |
49 There are no type definitions in the language. | |
50 All values carry their own type. | |
51 </p> | |
52 | |
53 <p> | |
54 All values in Luan are <em>first-class values</em>. | |
55 This means that all values can be stored in variables, | |
56 passed as arguments to other functions, and returned as results. | |
57 </p> | |
58 | |
59 <p> | |
60 There are eight basic types in Luan: | |
61 <em>nil</em>, <em>boolean</em>, <em>number</em>, | |
62 <em>string</em>, <em>binary</em>, <em>function</em>, <em>java</em>, | |
63 and <em>table</em>. | |
64 <em>Nil</em> is the type of the value <b>nil</b>, | |
65 whose main property is to be different from any other value; | |
66 it usually represents the absence of a useful value. | |
67 <em>Nil</em> is implemented as the Java value <em>null</em>. | |
68 <em>Boolean</em> is the type of the values <b>false</b> and <b>true</b>. | |
69 <em>Boolean</em> is implemented as the Java class <em>Boolean</em>. | |
70 <em>Number</em> represents both | |
71 integer numbers and real (floating-point) numbers. | |
72 <em>Number</em> is implemented as the Java class <em>Number</em>. Any Java subclass of <em>Number</em> is allowed and this is invisible to the Luan user. Operations on numbers follow the same rules of | |
73 the underlying Java implementation. | |
74 <em>String</em> is implemented as the Java class <em>String</em>. | |
75 <em>Binary</em> is implemented as the Java type <em>byte[]</em>. | |
76 </p> | |
77 | |
78 <p> | |
79 Luan can call (and manipulate) functions written in Luan and | |
80 functions written in Java (see <a href="#fn_calls">Function Calls</a>). | |
81 Both are represented by the type <em>function</em>. | |
82 </p> | |
83 | |
84 <p> | |
85 The type <em>java</em> is provided to allow arbitrary Java objects to | |
86 be stored in Luan variables. | |
87 A <em>java</em> value is a Java object that isn't one of the standard Luan types. | |
88 Java values have no predefined operations in Luan, | |
89 except assignment and identity test. | |
90 Java values are useful when Java access is enabled in Luan. | |
91 </p> | |
92 | |
93 <p> | |
94 The type <em>table</em> implements associative arrays, | |
95 that is, arrays that can be indexed not only with numbers, | |
96 but with any Luan value except <b>nil</b>. | |
97 Tables can be <em>heterogeneous</em>; | |
98 that is, they can contain values of all types (except <b>nil</b>). | |
99 Any key with value <b>nil</b> is not considered part of the table. | |
100 Conversely, any key that is not part of a table has | |
101 an associated value <b>nil</b>. | |
102 </p> | |
103 | |
104 <p> | |
105 Tables are the sole data-structuring mechanism in Luan; | |
106 they can be used to represent ordinary arrays, sequences, | |
107 symbol tables, sets, records, graphs, trees, etc. | |
108 To represent records, Luan uses the field name as an index. | |
109 The language supports this representation by | |
110 providing <code>a.name</code> as syntactic sugar for <code>a["name"]</code>. | |
111 There are several convenient ways to create tables in Luan | |
112 (see <a href="#constructors">Table Constructors</a>). | |
113 </p> | |
114 | |
115 <p> | |
116 We use the term <em>sequence</em> to denote a table where | |
117 the set of all positive numeric keys is equal to {1..<em>n</em>} | |
118 for some non-negative integer <em>n</em>, | |
119 which is called the length of the sequence (see <a href="#length">The Length Operator</a>). | |
120 </p> | |
121 | |
122 <p> | |
123 Like indices, | |
124 the values of table fields can be of any type. | |
125 In particular, | |
126 because functions are first-class values, | |
127 table fields can contain functions. | |
128 Thus tables can also carry <em>methods</em> (see <a href="#fn_def">Function Definitions</a>). | |
129 </p> | |
130 | |
131 <p> | |
132 The indexing of tables follows | |
133 the definition of raw equality in the language. | |
134 The expressions <code>a[i]</code> and <code>a[j]</code> | |
135 denote the same table element | |
136 if and only if <code>i</code> and <code>j</code> are raw equal | |
137 (that is, equal without metamethods). | |
138 In particular, floats with integral values | |
139 are equal to their respective integers | |
140 (e.g., <code>1.0 == 1</code>). | |
141 </p> | |
142 | |
143 <p> | |
144 Luan values are <em>objects</em>: | |
145 variables do not actually <em>contain</em> values, | |
146 only <em>references</em> to them. | |
147 Assignment, parameter passing, and function returns | |
148 always manipulate references to values; | |
149 these operations do not imply any kind of copy. | |
150 </p> | |
151 | |
152 <p> | |
153 The library function <a href="#Luan.type"><code>Luan.type</code></a> returns a string describing the type | |
154 of a given value. | |
155 </p> | |
156 <% | |
157 end | |
158 } | |
159 env = { | |
160 title = "Environments" | |
161 content = function() | |
162 %> | |
163 <p> | |
164 The environment of a chunk starts with only one local variable: <code><a href="#require">require</a></code>. This function is used to load and access libraries and other modules. All other variables must be added to the environment using <a href="http://localhost:8080/manual.html#local_stmt">local declarations</a>. | |
165 </p> | |
166 | |
167 <p> | |
168 As will be discussed in <a href="#vars">Variables</a> and <a href=#assignment">Assignment</a>, | |
169 any reference to a free name | |
170 (that is, a name not bound to any declaration) <code>var</code> | |
171 can be syntactically translated to <code>_ENV.var</code> if <code>_ENV</code> is defined. | |
172 </p> | |
173 <% | |
174 end | |
175 } | |
176 error = { | |
177 title = "Error Handling" | |
178 content = function() | |
179 %> | |
180 <p> | |
181 Luan code can explicitly generate an error by calling the | |
182 <a href="#Luan.error"><code>error</code></a> function. | |
183 If you need to catch errors in Luan, | |
184 you can use the <a href="#try">Try Statement</code></a>. | |
185 </p> | |
186 | |
187 <p> | |
188 Whenever there is an error, | |
189 an <em>error table</em> | |
190 is propagated with information about the error. | |
191 See <a href="#Luan.new_error"><code>Luan.new_error</code></a>. | |
192 </p> | |
193 <% | |
194 end | |
195 } | |
196 meta = { | |
197 title = "Metatables and Metamethods" | |
198 content = function() | |
199 %> | |
200 <p> | |
201 Every table in Luan can have a <em>metatable</em>. | |
202 This <em>metatable</em> is an ordinary Luan table | |
203 that defines the behavior of the original value | |
204 under certain special operations. | |
205 You can change several aspects of the behavior | |
206 of operations over a value by setting specific fields in its metatable. | |
207 For instance, when a table is the operand of an addition, | |
208 Luan checks for a function in the field "<code>__add</code>" of the table's metatable. | |
209 If it finds one, | |
210 Luan calls this function to perform the addition. | |
211 </p> | |
212 | |
213 <p> | |
214 The keys in a metatable are derived from the <em>event</em> names; | |
215 the corresponding values are called <ii>metamethods</em>. | |
216 In the previous example, the event is <code>"add"</code> | |
217 and the metamethod is the function that performs the addition. | |
218 </p> | |
219 | |
220 <p> | |
221 You can query the metatable of any table | |
222 using the <a href="#Luan.get_metatable"><code>get_metatable</code></a> function. | |
223 </p> | |
224 | |
225 <p> | |
226 You can replace the metatable of tables | |
227 using the <a href="#Luan.set_metatable"><code>set_metatable</code></a> function. | |
228 </p> | |
229 | |
230 <p> | |
231 A metatable controls how a table behaves in | |
232 arithmetic operations, bitwise operations, | |
233 order comparisons, concatenation, length operation, calls, and indexing. | |
234 </p> | |
235 | |
236 <p> | |
237 A detailed list of events controlled by metatables is given next. | |
238 Each operation is identified by its corresponding event name. | |
239 The key for each event is a string with its name prefixed by | |
240 two underscores, '<code>__</code>'; | |
241 for instance, the key for operation "add" is the | |
242 string "<code>__add</code>". | |
243 Note that queries for metamethods are always raw; | |
244 the access to a metamethod does not invoke other metamethods. | |
245 You can emulate how Luan queries a metamethod for an object <code>obj</code> | |
246 with the following code: | |
247 </p> | |
248 | |
249 <pre> | |
250 raw_get(get_metatable(obj) or {}, "__" .. event_name) | |
251 </pre> | |
252 | |
253 <p> | |
254 Here are the events: | |
255 </p> | |
256 | |
257 <ul> | |
258 | |
259 <li><p> | |
260 <b>"add": </b> | |
261 the <code>+</code> operation. | |
262 | |
263 If any operand for an addition is a table, | |
264 Luan will try to call a metamethod. | |
265 First, Luan will check the first operand (even if it is valid). | |
266 If that operand does not define a metamethod for the "<code>__add</code>" event, | |
267 then Luan will check the second operand. | |
268 If Luan can find a metamethod, | |
269 it calls the metamethod with the two operands as arguments, | |
270 and the result of the call | |
271 (adjusted to one value) | |
272 is the result of the operation. | |
273 Otherwise, | |
274 it raises an error. | |
275 </p></li> | |
276 | |
277 <li><p> | |
278 <b>"sub": </b> | |
279 the <code>-</code> operation. | |
280 Behavior similar to the "add" operation. | |
281 </li> | |
282 | |
283 <li><p><b>"mul": </b> | |
284 the <code>*</code> operation. | |
285 Behavior similar to the "add" operation. | |
286 </p></li> | |
287 | |
288 <li><p> | |
289 <b>"div": </b> | |
290 the <code>/</code> operation. | |
291 Behavior similar to the "add" operation. | |
292 </p></li> | |
293 | |
294 <li><p> | |
295 <b>"mod": </b> | |
296 the <code>%</code> operation. | |
297 Behavior similar to the "add" operation. | |
298 </p></li> | |
299 | |
300 <li><p> | |
301 <b>"pow": </b> | |
302 the <code>^</code> (exponentiation) operation. | |
303 Behavior similar to the "add" operation. | |
304 </p></li> | |
305 | |
306 <li><p> | |
307 <b>"unm": </b> | |
308 the <code>-</code> (unary minus) operation. | |
309 Behavior similar to the "add" operation. | |
310 </p></li> | |
311 | |
312 <li><p> | |
313 <b>"concat": </b> | |
314 the <code>..</code> (concatenation) operation. | |
315 Behavior similar to the "add" operation. | |
316 </p></li> | |
317 | |
318 <li><p> | |
319 <b>"len": </b> | |
320 the <code>#</code> (length) operation. | |
321 If there is a metamethod, | |
322 Luan calls it with the object as argument, | |
323 and the result of the call | |
324 (always adjusted to one value) | |
325 is the result of the operation. | |
326 If there is no metamethod but the object is a table, | |
327 then Luan uses the table length operation (see <a href="#length">The Length Operator</a>). | |
328 Otherwise, Luan raises an error. | |
329 </p></li> | |
330 | |
331 <li><p> | |
332 <b>"eq": </b> | |
333 the <code>==</code> (equal) operation. | |
334 Behavior similar to the "add" operation, | |
335 except that Luan will try a metamethod only when the values | |
336 being compared are both tables | |
337 and they are not primitively equal. | |
338 The result of the call is always converted to a boolean. | |
339 </p></li> | |
340 | |
341 <li><p> | |
342 <b>"lt": </b> | |
343 the <code><</code> (less than) operation. | |
344 Behavior similar to the "add" operation. | |
345 The result of the call is always converted to a boolean. | |
346 </p></li> | |
347 | |
348 <li><p> | |
349 <b>"le": </b> | |
350 the <code><=</code> (less equal) operation. | |
351 Unlike other operations, | |
352 The less-equal operation can use two different events. | |
353 First, Luan looks for the "<code>__le</code>" metamethod in both operands, | |
354 like in the "lt" operation. | |
355 If it cannot find such a metamethod, | |
356 then it will try the "<code>__lt</code>" event, | |
357 assuming that <code>a <= b</code> is equivalent to <code>not (b < a)</code>. | |
358 As with the other comparison operators, | |
359 the result is always a boolean. | |
360 </p></li> | |
361 | |
362 <li> | |
363 <p> | |
364 <b>"index": </b> | |
365 The indexing access <code>table[key]</code>. | |
366 This event happens | |
367 when <code>key</code> is not present in <code>table</code>. | |
368 The metamethod is looked up in <code>table</code>. | |
369 </p> | |
370 | |
371 <p> | |
372 Despite the name, | |
373 the metamethod for this event can be any type. | |
374 If it is a function, | |
375 it is called with <code>table</code> and <code>key</code> as arguments. | |
376 Otherwise | |
377 the final result is the result of indexing this metamethod object with <code>key</code>. | |
378 (This indexing is regular, not raw, | |
379 and therefore can trigger another metamethod if the metamethod object is a table.) | |
380 </p> | |
381 </li> | |
382 | |
383 <li> | |
384 <p> | |
385 <b>"new_index": </b> | |
386 The indexing assignment <code>table[key] = value</code>. | |
387 Like the index event, | |
388 this event happens when | |
389 when <code>key</code> is not present in <code>table</code>. | |
390 The metamethod is looked up in <code>table</code>. | |
391 </p> | |
392 | |
393 <p> | |
394 Like with indexing, | |
395 the metamethod for this event can be either a function or a table. | |
396 If it is a function, | |
397 it is called with <code>table</code>, <code>key</code>, and <code>value</code> as arguments. | |
398 If it is a table, | |
399 Luan does an indexing assignment to this table with the same key and value. | |
400 (This assignment is regular, not raw, | |
401 and therefore can trigger another metamethod.) | |
402 </p> | |
403 | |
404 <p> | |
405 Whenever there is a "new_index" metamethod, | |
406 Luan does not perform the primitive assignment. | |
407 (If necessary, | |
408 the metamethod itself can call <a href="#Luan.raw_set"><code>raw_set</code></a> | |
409 to do the assignment.) | |
410 </p> | |
411 </li> | |
412 | |
413 <li><p> | |
414 <b>"gc":</b> | |
415 This is when a table is garbage collected. When the table's <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()">finalize</a> method is called by the Java garbage collector, if there is a "<code>__gc</code>" metamethod then it is called with the table as a parameter. | |
416 </p></li> | |
417 | |
418 </ul> | |
419 <% | |
420 end | |
421 } | |
422 gc = { | |
423 title = "Garbage Collection" | |
424 content = function() | |
425 %> | |
426 <p> | |
427 Luan uses Java's garbage collection. | |
428 </p> | |
429 <% | |
430 end | |
431 } | |
432 } | |
433 } | |
434 lang = { | |
435 title = "The Language" | |
436 content = function() | |
437 %> | |
438 <p> | |
439 This section describes the lexis, the syntax, and the semantics of Luan. | |
440 In other words, | |
441 this section describes | |
442 which tokens are valid, | |
443 how they can be combined, | |
444 and what their combinations mean. | |
445 </p> | |
446 | |
447 <p> | |
448 Language constructs will be explained using the usual extended BNF notation, | |
449 in which | |
450 {<em>a</em>} means 0 or more <em>a</em>'s, and | |
451 [<em>a</em>] means an optional <em>a</em>. | |
452 Non-terminals are shown like non-terminal, | |
453 keywords are shown like <b>kword</b>, | |
454 and other terminal symbols are shown like ‘<b>=</b>’. | |
455 The complete syntax of Luan can be found in <a href="#9">§9</a> | |
456 at the end of this manual. | |
457 </p> | |
458 <% | |
459 end | |
460 subs = { | |
461 lex = { | |
462 title = "Lexical Conventions" | |
463 content = function() | |
464 %> | |
465 <p> | |
466 Luan ignores spaces and comments | |
467 between lexical elements (tokens), | |
468 except as delimiters between names and keywords. | |
469 Luan considers the end of a line to be the end of a statement. This catches errors and encourages readability. If you want to continue a statement on another line, you can use a backslash followed by a newline which will be treated as white space. | |
470 </p> | |
471 | |
472 <p> | |
473 <em>Names</em> | |
474 (also called <em>identifiers</em>) | |
475 in Luan can be any string of letters, | |
476 digits, and underscores, | |
477 not beginning with a digit. | |
478 Identifiers are used to name variables, table fields, and labels. | |
479 </p> | |
480 | |
481 <p> | |
482 The following <em>keywords</em> are reserved | |
483 and cannot be used as names: | |
484 </p> | |
485 | |
486 <p keywords> | |
487 <span>and</span> | |
488 <span>break</span> | |
489 <span>catch</span> | |
490 <span>continue</span> | |
491 <span>do</span> | |
492 <span>else</span> | |
493 <span>elseif</span> | |
494 <span>end_do</span> | |
495 <span>end_for</span> | |
496 <span>end_function</span> | |
497 <span>end_if</span> | |
498 <span>end_try</span> | |
499 <span>end_while</span> | |
500 <span>false</span> | |
501 <span>finally</span> | |
502 <span>for</span> | |
503 <span>function</span> | |
504 <span>if</span> | |
505 <span>in</span> | |
506 <span>local</span> | |
507 <span>nil</span> | |
508 <span>not</span> | |
509 <span>or</span> | |
510 <span>repeat</span> | |
511 <span>return</span> | |
512 <span>then</span> | |
513 <span>true</span> | |
514 <span>try</span> | |
515 <span>until</span> | |
516 <span>while</span> | |
517 </p> | |
518 | |
519 <p> | |
520 Luan is a case-sensitive language: | |
521 <code>and</code> is a reserved word, but <code>And</code> and <code>AND</code> | |
522 are two different, valid names. | |
523 </p> | |
524 | |
525 <p> | |
526 The following strings denote other tokens: | |
527 </p> | |
528 | |
529 <pre> | |
530 + - * / % ^ # | |
531 & ~ | << >> // | |
532 == ~= <= >= < > = | |
533 ( ) { } [ ] :: | |
534 ; : , . .. ... | |
535 </pre> | |
536 | |
537 <p> | |
538 <em>Literal strings</em> | |
539 can be delimited by matching single or double quotes, | |
540 and can contain the following C-like escape sequences: | |
541 '<code>\a</code>' (bell), | |
542 '<code>\b</code>' (backspace), | |
543 '<code>\f</code>' (form feed), | |
544 '<code>\n</code>' (newline), | |
545 '<code>\r</code>' (carriage return), | |
546 '<code>\t</code>' (horizontal tab), | |
547 '<code>\v</code>' (vertical tab), | |
548 '<code>\\</code>' (backslash), | |
549 '<code>\"</code>' (quotation mark [double quote]), | |
550 and '<code>\'</code>' (apostrophe [single quote]). | |
551 A backslash followed by a real newline | |
552 results in a newline in the string. | |
553 The escape sequence '<code>\z</code>' skips the following span | |
554 of white-space characters, | |
555 including line breaks; | |
556 it is particularly useful to break and indent a long literal string | |
557 into multiple lines without adding the newlines and spaces | |
558 into the string contents. | |
559 </p> | |
560 | |
561 <p> | |
562 Luan can specify any character in a literal string by its numerical value. | |
563 This can be done | |
564 with the escape sequence <code>\x<em>XX</em></code>, | |
565 where <em>XX</em> is a sequence of exactly two hexadecimal digits, | |
566 or with the escape sequence <code>\u<em>XXXX</em></code>, | |
567 where <em>XXXX</em> is a sequence of exactly four hexadecimal digits, | |
568 or with the escape sequence <code>\<em>ddd</em></code>, | |
569 where <em>ddd</em> is a sequence of up to three decimal digits. | |
570 (Note that if a decimal escape sequence is to be followed by a digit, | |
571 it must be expressed using exactly three digits.) | |
572 </p> | |
573 | |
574 <p> | |
575 Literal strings can also be defined using a long format | |
576 enclosed by <em>long brackets</em>. | |
577 We define an <em>opening long bracket of level <em>n</em></em> as an opening | |
578 square bracket followed by <em>n</em> equal signs followed by another | |
579 opening square bracket. | |
580 So, an opening long bracket of level 0 is written as <code>[[</code>, | |
581 an opening long bracket of level 1 is written as <code>[=[</code>, | |
582 and so on. | |
583 A <em>closing long bracket</em> is defined similarly; | |
584 for instance, | |
585 a closing long bracket of level 4 is written as <code>]====]</code>. | |
586 A <em>long literal</em> starts with an opening long bracket of any level and | |
587 ends at the first closing long bracket of the same level. | |
588 It can contain any text except a closing bracket of the same level. | |
589 Literals in this bracketed form can run for several lines, | |
590 do not interpret any escape sequences, | |
591 and ignore long brackets of any other level. | |
592 Any kind of end-of-line sequence | |
593 (carriage return, newline, carriage return followed by newline, | |
594 or newline followed by carriage return) | |
595 is converted to a simple newline. | |
596 </p> | |
597 | |
598 <p> | |
599 Any character in a literal string not | |
600 explicitly affected by the previous rules represents itself. | |
601 However, Luan opens files for parsing in text mode, | |
602 and the system file functions may have problems with | |
603 some control characters. | |
604 So, it is safer to represent | |
605 non-text data as a quoted literal with | |
606 explicit escape sequences for non-text characters. | |
607 </p> | |
608 | |
609 <p> | |
610 For convenience, | |
611 when the opening long bracket is immediately followed by a newline, | |
612 the newline is not included in the string. | |
613 As an example | |
614 the five literal strings below denote the same string: | |
615 </p> | |
616 | |
617 <pre> | |
618 a = 'alo\n123"' | |
619 a = "alo\n123\"" | |
620 a = '\97lo\10\04923"' | |
621 a = [[alo | |
622 123"]] | |
623 a = [==[ | |
624 alo | |
625 123"]==] | |
626 </pre> | |
627 | |
628 <p> | |
629 A <em>numerical constant</em> (or <em>numeral</em>) | |
630 can be written with an optional fractional part | |
631 and an optional decimal exponent, | |
632 marked by a letter '<code>e</code>' or '<code>E</code>'. | |
633 Luan also accepts hexadecimal constants, | |
634 which start with <code>0x</code> or <code>0X</code>. | |
635 Hexadecimal constants also accept an optional fractional part | |
636 plus an optional binary exponent, | |
637 marked by a letter '<code>p</code>' or '<code>P</code>'. | |
638 A numeric constant with a fractional dot or an exponent | |
639 denotes a float; | |
640 otherwise it denotes an integer. | |
641 Examples of valid integer constants are | |
642 </p> | |
643 | |
644 <pre> | |
645 3 345 0xff 0xBEBADA | |
646 </pre> | |
647 | |
648 <p> | |
649 Examples of valid float constants are | |
650 </p> | |
651 | |
652 <pre> | |
653 3.0 3.1416 314.16e-2 0.31416E1 34e1 | |
654 0x0.1E 0xA23p-4 0X1.921FB54442D18P+1 | |
655 </pre> | |
656 | |
657 <p> | |
658 A <em>comment</em> starts with a double hyphen (<code>--</code>) | |
659 anywhere outside a string. | |
660 If the text immediately after <code>--</code> is not an opening long bracket, | |
661 the comment is a <em>short comment</em>, | |
662 which runs until the end of the line. | |
663 Otherwise, it is a <em>long comment</em>, | |
664 which runs until the corresponding closing long bracket. | |
665 Long comments are frequently used to disable code temporarily. | |
666 </p> | |
667 <% | |
668 end | |
669 } | |
670 vars = { | |
671 title = "Variables" | |
672 content = function() | |
673 %> | |
674 <p> | |
675 Variables are places that store values. | |
676 There are three kinds of variables in Luan: | |
677 global variables, local variables, and table fields. | |
678 </p> | |
679 | |
680 <p> | |
681 A single name can denote a global variable or a local variable | |
682 (or a function's formal parameter, | |
683 which is a particular kind of local variable): | |
684 </p> | |
685 | |
686 <pre> | |
687 var ::= Name | |
688 </pre> | |
689 | |
690 <p> | |
691 Name denotes identifiers, as defined in <a href="#lex">Lexical Conventions</a>. | |
692 </p> | |
693 | |
694 <p> | |
695 Local variables are <em>lexically scoped</em>: | |
696 local variables can be freely accessed by functions | |
697 defined inside their scope (see <a href="#visibility">Visibility Rules</a>). | |
698 </p> | |
699 | |
700 <p> | |
701 Before the first assignment to a variable, its value is <b>nil</b>. | |
702 </p> | |
703 | |
704 <p> | |
705 Square brackets are used to index a table: | |
706 </p> | |
707 | |
708 <pre> | |
709 var ::= prefixexp ‘<b>[</b>’ exp ‘<b>]</b>’ | |
710 </pre> | |
711 | |
712 <p> | |
713 The meaning of accesses to table fields can be changed via metatables. | |
714 An access to an indexed variable <code>t[i]</code> is equivalent to | |
715 a call <code>gettable_event(t,i)</code>. | |
716 (See <a href="#meta">Metatables and Metamethods</a> for a complete description of the | |
717 <code>gettable_event</code> function. | |
718 This function is not defined or callable in Luan. | |
719 We use it here only for explanatory purposes.) | |
720 </p> | |
721 | |
722 <p> | |
723 The syntax <code>var.Name</code> is just syntactic sugar for | |
724 <code>var["Name"]</code>: | |
725 </p> | |
726 | |
727 <pre> | |
728 var ::= prefixexp ‘<b>.</b>’ Name | |
729 </pre> | |
730 | |
731 <p> | |
732 Global variables are not available by default. To enable global variable, you must define <code>_ENV</code> as a local variable whose value is a table. If <code>_ENV</code> is not defined, then an unrecognized variable name will produce a compile error. If <code>_ENV</code> is defined then an access to an unrecognized variable name will be consider a global variable. So then an acces to global variable <code>x</code> | |
733 is equivalent to <code>_ENV.x</code>. | |
734 Due to the way that chunks are compiled, | |
735 <code>_ENV</code> is never a global name (see <a href="#env">Environments</a>). | |
736 </p> | |
737 <% | |
738 end | |
739 } | |
740 stmt = { | |
741 title = "Statements" | |
742 content = function() | |
743 %> | |
744 <p> | |
745 Luan supports an almost conventional set of statements, | |
746 similar to those in Pascal or C. | |
747 This set includes | |
748 assignments, control structures, function calls, | |
749 and variable declarations. | |
750 </p> | |
751 <% | |
752 end | |
753 subs = { | |
754 blocks = { | |
755 title = "Blocks" | |
756 content = function() | |
757 %> | |
758 <p> | |
759 A block is a list of statements, | |
760 which are executed sequentially: | |
761 </p> | |
762 | |
763 <pre> | |
764 block ::= {stat} | |
765 </pre> | |
766 | |
767 <p> | |
768 Luan has <em>empty statements</em> | |
769 that allow you to separate statements with semicolons, | |
770 start a block with a semicolon | |
771 or write two semicolons in sequence: | |
772 </p> | |
773 | |
774 <pre> | |
775 stat ::= ‘<b>;</b>’ | |
776 </pre> | |
777 | |
778 <p> | |
779 A block can be explicitly delimited to produce a single statement: | |
780 </p> | |
781 | |
782 <pre> | |
783 stat ::= <b>do</b> block end_do | |
784 end_do ::= <b>end_do</b> | <b>end</b> | |
785 </pre> | |
786 | |
787 <p> | |
788 Explicit blocks are useful | |
789 to control the scope of variable declarations. | |
790 Explicit blocks are also sometimes used to | |
791 add a <b>return</b> statement in the middle | |
792 of another block (see <a href="#control">Control Structures</a>). | |
793 </p> | |
794 <% | |
795 end | |
796 } | |
797 chunks = { | |
798 title = "Chunks" | |
799 content = function() | |
800 %> | |
801 <p> | |
802 The unit of compilation of Luan is called a <em>chunk</em>. | |
803 Syntactically, | |
804 a chunk is simply a block: | |
805 </p> | |
806 | |
807 <pre> | |
808 chunk ::= block | |
809 </pre> | |
810 | |
811 <p> | |
812 Luan handles a chunk as the body of an anonymous function | |
813 with a variable number of arguments | |
814 (see <a href="#fn_def">Function Definitions</a>). | |
815 As such, chunks can define local variables, | |
816 receive arguments, and return values. | |
817 </p> | |
818 | |
819 <p> | |
820 A chunk can be stored in a file or in a string inside the host program. | |
821 To execute a chunk, | |
822 Luan first <em>loads</em> it, | |
823 compiling the chunk's code, | |
824 and then Luan executes the compiled code. | |
825 </p> | |
826 <% | |
827 end | |
828 } | |
829 assignment = { | |
830 title = "Assignment" | |
831 content = function() | |
832 %> | |
833 <p> | |
834 Luan allows multiple assignments. | |
835 Therefore, the syntax for assignment | |
836 defines a list of variables on the left side | |
837 and a list of expressions on the right side. | |
838 The elements in both lists are separated by commas: | |
839 </p> | |
840 | |
841 <pre> | |
842 stat ::= varlist ‘<b>=</b>’ explist | |
843 varlist ::= var {‘<b>,</b>’ var} | |
844 explist ::= exp {‘<b>,</b>’ exp} | |
845 </pre> | |
846 | |
847 <p> | |
848 Expressions are discussed in <a href="#expressions">Expressions</a>. | |
849 </p> | |
850 | |
851 <p> | |
852 Before the assignment, | |
853 the list of values is <em>adjusted</em> to the length of | |
854 the list of variables. | |
855 If there are more values than needed, | |
856 the excess values are thrown away. | |
857 If there are fewer values than needed, | |
858 the list is extended with as many <b>nil</b>'s as needed. | |
859 If the list of expressions ends with a function call, | |
860 then all values returned by that call enter the list of values, | |
861 before the adjustment | |
862 (except when the call is enclosed in parentheses; see <a href="#expressions">Expressions</a>). | |
863 </p> | |
864 | |
865 <p> | |
866 The assignment statement first evaluates all its expressions | |
867 and only then the assignments are performed. | |
868 Thus the code | |
869 </p> | |
870 | |
871 <pre> | |
872 i = 3 | |
873 i, a[i] = i+1, 20 | |
874 </pre> | |
875 | |
876 <p> | |
877 sets <code>a[3]</code> to 20, without affecting <code>a[4]</code> | |
878 because the <code>i</code> in <code>a[i]</code> is evaluated (to 3) | |
879 before it is assigned 4. | |
880 Similarly, the line | |
881 </p> | |
882 | |
883 <pre> | |
884 x, y = y, x | |
885 </pre> | |
886 | |
887 <p> | |
888 exchanges the values of <code>x</code> and <code>y</code>, | |
889 and | |
890 </p> | |
891 | |
892 <pre> | |
893 x, y, z = y, z, x | |
894 </pre> | |
895 | |
896 <p> | |
897 cyclically permutes the values of <code>x</code>, <code>y</code>, and <code>z</code>. | |
898 </p> | |
899 | |
900 <p> | |
901 The meaning of assignments to global variables | |
902 and table fields can be changed via metatables. | |
903 An assignment to an indexed variable <code>t[i] = val</code> is equivalent to | |
904 <code>settable_event(t,i,val)</code>. | |
905 (See <a href="#meta">Metatables and Metamethods</a> for a complete description of the | |
906 <code>settable_event</code> function. | |
907 This function is not defined or callable in Luan. | |
908 We use it here only for explanatory purposes.) | |
909 </p> | |
910 | |
911 <p> | |
912 An assignment to a global name <code>x = val</code> | |
913 is equivalent to the assignment | |
914 <code>_ENV.x = val</code> (see <a href="#env">Environments</a>). | |
915 Global names are only available when <code>_ENV</code> is defined. | |
916 </p> | |
917 <% | |
918 end | |
919 } | |
920 } | |
921 } | |
922 } | |
923 } | |
924 } | |
925 | |
926 | |
927 return function() | |
928 Io.stdout = Http.response.text_writer() | |
929 %> | |
930 <!doctype html> | |
931 <html> | |
932 <head> | |
933 <% head() %> | |
934 <title>Luan Reference Manual</title> | |
935 <style> | |
936 p[keywords] { | |
937 font-family: monospace; | |
938 margin-left: 40px; | |
939 max-width: 700px; | |
940 } | |
941 p[keywords] span { | |
942 display: inline-block; | |
943 width: 100px; | |
944 } | |
945 </style> | |
946 </head> | |
947 <body> | |
948 <% docs_header() %> | |
949 <div content> | |
950 <h1><a href="manual.html">Luan Reference Manual</a></h1> | |
951 <p small> | |
952 Original copyright © 2015 Lua.org, PUC-Rio. | |
953 Freely available under the terms of the | |
954 <a href="http://www.lua.org/license.html">Lua license</a>. | |
955 Modified for Luan. | |
956 </p> | |
957 <hr> | |
958 <h2>Contents</h2> | |
959 <div toc> | |
960 <% show_toc(content) %> | |
961 </div> | |
962 <hr> | |
963 <% show_content(content,2) %> | |
964 </div> | |
965 </body> | |
966 </html> | |
967 <% | |
968 end |