syntax.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Gravity: Syntax</title>
  7. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css" />
  8. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  9. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700,800">
  10. <link rel="stylesheet" href="scripts/highlight/styles/github-gist.css">
  11. <link rel="stylesheet" href="stylesheets/styles.css">
  12. </head>
  13. <body>
  14. <!-- BEGIN NAVIGATION BAR -->
  15. <nav class="navbar navbar-default navbar-fixed-top">
  16. <div class="container">
  17. <div class="navbar-header">
  18. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
  19. <span class="sr-only">Toggle navigation</span>
  20. <span class="icon-bar"></span>
  21. <span class="icon-bar"></span>
  22. <span class="icon-bar"></span>
  23. </button>
  24. <a class="navbar-brand" href="http://gravity-lang.org"><img src="images/logo.png" width="32px" height="36px"></a>
  25. </div>
  26. <div id="navbar" class="navbar-collapse collapse">
  27. <ul class="nav navbar-nav navbar-right">
  28. <li class="active"><a href="index.html">Gravity</a></li>
  29. <li><a href="internals/index.html">Internals</a></li>
  30. <li><a href="https://github.com/marcobambini/gravity">GitHub</a></li>
  31. </ul>
  32. </div><!--/.nav-collapse -->
  33. </div>
  34. </nav>
  35. <!-- END NAVIGATION BAR -->
  36. <div class="container body-container">
  37. <div class="main-content">
  38. <div class="row">
  39. <!-- BEGIN SIDEBAR -->
  40. <div class="col-sm-3 border-right section-left">
  41. <div saveheight="1" class="sidebar-nav">
  42. <h4>INTRODUCTION</h4>
  43. <ul>
  44. <li><a href="index.html"><span>Introduction</span></a></li>
  45. <li><a href="getting-started.html"><span>Getting Started</span></a></li>
  46. </ul>
  47. <h4>LANGUAGE GUIDE</h4>
  48. <ul>
  49. <li><a href="syntax.html" class="active"><span>Syntax</span></a></li>
  50. <li><a href="operators.html"><span>Operators</span></a></li>
  51. <li><a href="types.html"><span>Types</span></a></li>
  52. <li><a href="lists.html"><span>Lists</span></a></li>
  53. <li><a href="maps.html"><span>Maps</span></a></li>
  54. <li><a href="enum.html"><span>Enum</span></a></li>
  55. <li><a href="functions.html"><span>Functions</span></a></li>
  56. <li><a href="closures.html"><span>Closures</span></a></li>
  57. <li><a href="classes.html"><span>Classes</span></a></li>
  58. <li><a href="control-flow.html"><span>Control Flow</span></a></li>
  59. <li><a href="loops.html"><span>Loops</span></a></li>
  60. <li><a href="fibers.html"><span>Fibers</span></a></li>
  61. </ul>
  62. <h4>ADVANCED</h4>
  63. <ul>
  64. <li><a href="api.html"><span>Embedding API</span></a></li>
  65. <li><a href="system.html"><span>System class</span></a></li>
  66. <li><a href="unit-test.html"><span>Unit test</span></a></li>
  67. <li><a href="contributing.html"><span>Contributing</span></a></li>
  68. </ul>
  69. </div>
  70. </div>
  71. <!-- END SIDEBAR -->
  72. <div class="col-sm-9 border-left section-right">
  73. <h1 class="section-header">Syntax</h1><hr>
  74. <p class="section-content">
  75. <strong>Gravity</strong> syntax is designed to be familiar to people coming from C-like languages like Javascript, Swift, C++, C# and many more. We started working on this new language a year before Apple announced Swift and we were happily surprised to discovered how similar both syntax appear. Semicolon separator <strong>;</strong> is optional.
  76. <br><br>
  77. How a Gravity program looks like:</p>
  78. <pre><code class="swift">
  79. class Rectangle {
  80. // instance variables
  81. var width;
  82. var height;
  83. // instance method
  84. func area() {
  85. return width*height;
  86. }
  87. // constructor
  88. func init(w, h) {
  89. width = w;
  90. height = h;
  91. }
  92. }
  93. func main() {
  94. // initialize a new Rectangle object
  95. var r = Rectangle(20, 10);
  96. // return value is 20*10 = 200
  97. return r.area();
  98. }
  99. </code></pre>
  100. <!-- COMMENTS -->
  101. <h4 class="section-h4">Comments</h4>
  102. <p>Gravity supports both line comments:</p>
  103. <pre><code class="swift">
  104. // This is a line comment
  105. </code></pre>
  106. <p>and block comments:</p>
  107. <pre><code class="swift">
  108. /*
  109. This
  110. is
  111. a
  112. multi-line
  113. comment
  114. */</code></pre>
  115. <!-- RESERVED KEYWORDS -->
  116. <h4 class="section-h4">Reserved Keywords</h4>
  117. <p>Like many other programming languages Gravity has some reserved keywords that assumes a very specific meaning in the context of the source code:</p>
  118. <pre><code class="swift">
  119. if in or isa for var and not func else true enum case null
  120. file lazy super false break while class const event _func
  121. _args struct repeat switch return public static extern
  122. import module default private continue internal undefined
  123. </code></pre>
  124. <!-- IDENTIFIERS -->
  125. <h4 class="section-h4">Identifiers</h4>
  126. <p>Identifiers represent a naming rule used to identifies objects inside your source code.
  127. Gravity is a case-sensitive language. Identifiers start with a letter or underscore and may contain letters, digits, and underscores (function identifiers can be any of the <a href="operators.html">built-in operators</a> in order to override a default behaviour):</p>
  128. <pre><code class="swift">
  129. a
  130. _thisIsValid
  131. Hello_World
  132. foo123
  133. BYE_BYE
  134. </code></pre>
  135. <!-- BLOCKS -->
  136. <h4 class="section-h4">Blocks and Scope</h4>
  137. <p>Every named identifier introduced in some portion of the source code is introduced in a scope. The scope is the largest part of the source code in which that identifier is valid. The names declared by a declaration are introduced into a specific scope based on the context of the declaration. For instance, local variable declarations introduce the name into the block scope, whereas class member variable declarations introduce the name into class scope.<br><br>There are three scopes defined: <strong>block scope</strong>, <strong>class scope</strong> and <strong>file scope</strong>. Names declared at block become visible immediately after its completed declarator. This means you cannot refer to a name within block until after it has been fully declared. Names declared at file and class scope become visible immediately upon executing the starting statement of the script. This means you can refer to a name within file or class scope before it has been fully declared.<br><br>These are all valid scopes:</p>
  138. <pre><code class="swift">
  139. // file scope can refer to a name
  140. // before it has been fully declared
  141. func f1() {
  142. return f2();
  143. }
  144. func f2() {
  145. return 42;
  146. }
  147. // block scope can be nested and
  148. // can hide other local variables
  149. func f3() {
  150. var a = 10;
  151. if (a > 0) {
  152. var a = 20;
  153. }
  154. // 10 is returned here
  155. return a;
  156. }
  157. </code></pre>
  158. </div>
  159. </div> <!-- /row -->
  160. </div> <!-- /main-content -->
  161. </div> <!-- /container -->
  162. <!-- BEGIN FOOTER -->
  163. <footer class="navbar-fixed-bottom">
  164. <div class="container footer">
  165. <p>
  166. </p>
  167. </div>
  168. </footer>
  169. <!-- END FOOTER -->
  170. <!-- Bootstrap JS -->
  171. <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
  172. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  173. <!-- Highlights JS -->
  174. <script src="scripts/highlight/highlight.min.js"></script>
  175. <script>hljs.initHighlightingOnLoad();</script>
  176. </body>
  177. </html>