comparison website/src/manual.html.luan @ 389:497d4ef0a89f

documentation work
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 24 Apr 2015 12:25:50 -0600
parents 23d075ce1e48
children 2f5cc9c2cbf0
comparison
equal deleted inserted replaced
388:12ee9a336b95 389:497d4ef0a89f
46 <div margin-bottom="1em"> 46 <div margin-bottom="1em">
47 <a href="#lang">The Language</a> 47 <a href="#lang">The Language</a>
48 <ul> 48 <ul>
49 <li><a href="#lex">Lexical Conventions</a></li> 49 <li><a href="#lex">Lexical Conventions</a></li>
50 <li><a href="#vars">Variables</a></li> 50 <li><a href="#vars">Variables</a></li>
51 <li>
52 <a href="#stmts">Statements</a>
53 <ul>
54 <li><a href="#blocks">Blocks</a></li>
55 </ul>
56 </li>
51 </ul> 57 </ul>
52 </div> 58 </div>
53 59
54 <hr/> 60 <hr/>
55 61
523 <p> 529 <p>
524 The following <i>keywords</i> are reserved 530 The following <i>keywords</i> are reserved
525 and cannot be used as names: 531 and cannot be used as names:
526 532
527 533
528 <p><pre> 534 <p><tt><pre>
529 and break do else elseif end 535 and break do else elseif end
530 false for function goto if in 536 false for function goto if in
531 local nil not or repeat return 537 local nil not or repeat return
532 then true until while 538 then true until while
533 </pre></p> 539 </pre></tt></p>
534 540
535 <p> 541 <p>
536 Luan is a case-sensitive language: 542 Luan is a case-sensitive language:
537 <tt>and</tt> is a reserved word, but <tt>And</tt> and <tt>AND</tt> 543 <tt>and</tt> is a reserved word, but <tt>And</tt> and <tt>AND</tt>
538 are two different, valid names. 544 are two different, valid names.
539 545
540 546
541 <p> 547 <p>
542 The following strings denote other tokens: 548 The following strings denote other tokens:
543 549
544 <p><pre> 550 <p><tt><pre>
545 + - * / % ^ # 551 + - * / % ^ #
546 &amp; ~ | &lt;&lt; &gt;&gt; // 552 &amp; ~ | &lt;&lt; &gt;&gt; //
547 == ~= &lt;= &gt;= &lt; &gt; = 553 == ~= &lt;= &gt;= &lt; &gt; =
548 ( ) { } [ ] :: 554 ( ) { } [ ] ::
549 ; : , . .. ... 555 ; : , . .. ...
550 </pre></p> 556 </pre></tt></p>
551 557
552 <p> 558 <p>
553 <i>Literal strings</i> 559 <i>Literal strings</i>
554 can be delimited by matching single or double quotes, 560 can be delimited by matching single or double quotes,
555 and can contain the following C-like escape sequences: 561 and can contain the following C-like escape sequences:
624 when the opening long bracket is immediately followed by a newline, 630 when the opening long bracket is immediately followed by a newline,
625 the newline is not included in the string. 631 the newline is not included in the string.
626 As an example 632 As an example
627 the five literal strings below denote the same string: 633 the five literal strings below denote the same string:
628 634
629 <p><pre> 635 <p><tt><pre>
630 a = 'alo\n123"' 636 a = 'alo\n123"'
631 a = "alo\n123\"" 637 a = "alo\n123\""
632 a = '\97lo\10\04923"' 638 a = '\97lo\10\04923"'
633 a = [[alo 639 a = [[alo
634 123"]] 640 123"]]
635 a = [==[ 641 a = [==[
636 alo 642 alo
637 123"]==] 643 123"]==]
638 </pre></p> 644 </pre></tt></p>
639 645
640 <p> 646 <p>
641 A <i>numerical constant</i> (or <i>numeral</i>) 647 A <i>numerical constant</i> (or <i>numeral</i>)
642 can be written with an optional fractional part 648 can be written with an optional fractional part
643 and an optional decimal exponent, 649 and an optional decimal exponent,
650 A numeric constant with a fractional dot or an exponent 656 A numeric constant with a fractional dot or an exponent
651 denotes a float; 657 denotes a float;
652 otherwise it denotes an integer. 658 otherwise it denotes an integer.
653 Examples of valid integer constants are 659 Examples of valid integer constants are
654 660
655 <p><pre> 661 <p><tt><pre>
656 3 345 0xff 0xBEBADA 662 3 345 0xff 0xBEBADA
657 </pre></p> 663 </pre></tt></p>
658 664
659 <p> 665 <p>
660 Examples of valid float constants are 666 Examples of valid float constants are
661 667
662 <p><pre> 668 <p><tt><pre>
663 3.0 3.1416 314.16e-2 0.31416E1 34e1 669 3.0 3.1416 314.16e-2 0.31416E1 34e1
664 0x0.1E 0xA23p-4 0X1.921FB54442D18P+1 670 0x0.1E 0xA23p-4 0X1.921FB54442D18P+1
665 </pre></p> 671 </pre></tt></p>
666 672
667 <p> 673 <p>
668 A <i>comment</i> starts with a double hyphen (<tt>--</tt>) 674 A <i>comment</i> starts with a double hyphen (<tt>--</tt>)
669 anywhere outside a string. 675 anywhere outside a string.
670 If the text immediately after <tt>--</tt> is not an opening long bracket, 676 If the text immediately after <tt>--</tt> is not an opening long bracket,
689 <p> 695 <p>
690 A single name can denote a global variable or a local variable 696 A single name can denote a global variable or a local variable
691 (or a function's formal parameter, 697 (or a function's formal parameter,
692 which is a particular kind of local variable): 698 which is a particular kind of local variable):
693 699
694 <p><pre> 700 <p><tt><pre>
695 var ::= Name 701 var ::= Name
696 </pre></p> 702 </pre></tt></p>
697 703
698 <p> 704 <p>
699 Name denotes identifiers, as defined in <a href="#3.1">&sect;3.1</a>. 705 Name denotes identifiers, as defined in <a href="#3.1">&sect;3.1</a>.
700 706
701 707
712 718
713 719
714 <p> 720 <p>
715 Square brackets are used to index a table: 721 Square brackets are used to index a table:
716 722
717 <p><pre> 723 <p><tt><pre>
718 var ::= prefixexp &lsquo;<b>[</b>&rsquo; exp &lsquo;<b>]</b>&rsquo; 724 var ::= prefixexp &lsquo;<b>[</b>&rsquo; exp &lsquo;<b>]</b>&rsquo;
719 </pre></p> 725 </pre></tt></p>
720 726
721 <p> 727 <p>
722 The meaning of accesses to table fields can be changed via metatables. 728 The meaning of accesses to table fields can be changed via metatables.
723 An access to an indexed variable <tt>t[i]</tt> is equivalent to 729 An access to an indexed variable <tt>t[i]</tt> is equivalent to
724 a call <tt>gettable_event(t,i)</tt>. 730 a call <tt>gettable_event(t,i)</tt>.
730 736
731 <p> 737 <p>
732 The syntax <tt>var.Name</tt> is just syntactic sugar for 738 The syntax <tt>var.Name</tt> is just syntactic sugar for
733 <tt>var["Name"]</tt>: 739 <tt>var["Name"]</tt>:
734 740
735 <p><pre> 741 <p><tt><pre>
736 var ::= prefixexp &lsquo;<b>.</b>&rsquo; Name 742 var ::= prefixexp &lsquo;<b>.</b>&rsquo; Name
737 </pre></p> 743 </pre></tt></p>
738 744
739 <p> 745 <p>
740 An access to a global variable <tt>x</tt> 746 An access to a global variable <tt>x</tt>
741 is equivalent to <tt>_ENV.x</tt>. 747 is equivalent to <tt>_ENV.x</tt>.
742 Due to the way that chunks are compiled, 748 Due to the way that chunks are compiled,
744 750
745 751
746 752
747 753
748 754
749 <h2>3.3 &ndash; <a name="3.3">Statements</a></h2> 755 <h3 margin-top="1em"><a name="stmts">Statements</a></h3>
750 756
751 <p> 757 <p>
752 Lua supports an almost conventional set of statements, 758 Luan supports an almost conventional set of statements,
753 similar to those in Pascal or C. 759 similar to those in Pascal or C.
754 This set includes 760 This set includes
755 assignments, control structures, function calls, 761 assignments, control structures, function calls,
756 and variable declarations. 762 and variable declarations.
757 763
758 764
759 765
760 <h3>3.3.1 &ndash; <a name="3.3.1">Blocks</a></h3> 766 <h3 margin-top="1em"><a name="blocks">Blocks</a></h3>
761 767
762 <p> 768 <p>
763 A block is a list of statements, 769 A block is a list of statements,
764 which are executed sequentially: 770 which are executed sequentially:
765 771
766 <pre> 772 <p><tt><pre>
767 block ::= {stat} 773 block ::= {stat}
768 </pre><p> 774 </pre></tt></p>
769 Lua has <em>empty statements</em> 775
776 <p>
777 Luan has <i>empty statements</i>
770 that allow you to separate statements with semicolons, 778 that allow you to separate statements with semicolons,
771 start a block with a semicolon 779 start a block with a semicolon
772 or write two semicolons in sequence: 780 or write two semicolons in sequence:
773 781
774 <pre> 782 <p><tt><pre>
775 stat ::= &lsquo;<b>;</b>&rsquo; 783 stat ::= &lsquo;<b>;</b>&rsquo;
776 </pre> 784 </pre></tt></p>
777
778 <p>
779 Function calls and assignments
780 can start with an open parenthesis.
781 This possibility leads to an ambiguity in Lua's grammar.
782 Consider the following fragment:
783
784 <pre>
785 a = b + c
786 (print or io.write)('done')
787 </pre><p>
788 The grammar could see it in two ways:
789
790 <pre>
791 a = b + c(print or io.write)('done')
792
793 a = b + c; (print or io.write)('done')
794 </pre><p>
795 The current parser always sees such constructions
796 in the first way,
797 interpreting the open parenthesis
798 as the start of the arguments to a call.
799 To avoid this ambiguity,
800 it is a good practice to always precede with a semicolon
801 statements that start with a parenthesis:
802
803 <pre>
804 ;(print or io.write)('done')
805 </pre>
806 785
807 <p> 786 <p>
808 A block can be explicitly delimited to produce a single statement: 787 A block can be explicitly delimited to produce a single statement:
809 788
810 <pre> 789 <p><tt><pre>
811 stat ::= <b>do</b> block <b>end</b> 790 stat ::= <b>do</b> block <b>end</b>
812 </pre><p> 791 </pre></tt></p>
792
793 <p>
813 Explicit blocks are useful 794 Explicit blocks are useful
814 to control the scope of variable declarations. 795 to control the scope of variable declarations.
815 Explicit blocks are also sometimes used to 796 Explicit blocks are also sometimes used to
816 add a <b>return</b> statement in the middle 797 add a <b>return</b> statement in the middle
817 of another block (see <a href="#3.3.4">&sect;3.3.4</a>). 798 of another block (see <a href="#3.3.4">&sect;3.3.4</a>).