155 lines
6.3 KiB
ReStructuredText
155 lines
6.3 KiB
ReStructuredText
.. _lexical_structure:
|
|
|
|
|
|
=================
|
|
Lexical Structure
|
|
=================
|
|
|
|
.. index:: single: lexical structure
|
|
|
|
-----------
|
|
Identifiers
|
|
-----------
|
|
|
|
.. index:: single: identifiers
|
|
|
|
Identifiers start with an alphabetic character or the symbol '_' followed by any number
|
|
of alphabetic characters, '_' or digits ([0-9]). Squirrel is a case sensitive language
|
|
meaning that the lowercase and uppercase representation of the same alphabetic
|
|
character are considered different characters. For instance, "foo", "Foo" and "fOo" are
|
|
treated as 3 distinct identifiers.
|
|
|
|
-----------
|
|
Keywords
|
|
-----------
|
|
|
|
.. index:: single: keywords
|
|
|
|
The following words are reserved and cannot be used as identifiers:
|
|
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| base | break | case | catch | class | clone |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| continue | const | default | delete | else | enum |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| extends | for | foreach | function | if | in |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| local | null | resume | return | switch | this |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| throw | try | typeof | while | yield | constructor |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
| instanceof | true | false | static | __LINE__ | __FILE__ |
|
|
+------------+------------+-----------+------------+------------+-------------+
|
|
|
|
Keywords are covered in detail later in this document.
|
|
|
|
-----------
|
|
Operators
|
|
-----------
|
|
|
|
.. index:: single: operators
|
|
|
|
Squirrel recognizes the following operators:
|
|
|
|
+----------+----------+----------+----------+----------+----------+----------+----------+
|
|
| ``!`` | ``!=`` | ``||`` | ``==`` | ``&&`` | ``>=`` | ``<=`` | ``>`` |
|
|
+----------+----------+----------+----------+----------+----------+----------+----------+
|
|
| ``<=>`` | ``+`` | ``+=`` | ``-`` | ``-=`` | ``/`` | ``/=`` | ``*`` |
|
|
+----------+----------+----------+----------+----------+----------+----------+----------+
|
|
| ``*=`` | ``%`` | ``%=`` | ``++`` | ``--`` | ``<-`` | ``=`` | ``&`` |
|
|
+----------+----------+----------+----------+----------+----------+----------+----------+
|
|
| ``^`` | ``|`` | ``~`` | ``>>`` | ``<<`` | ``>>>`` | | |
|
|
+----------+----------+----------+----------+----------+----------+----------+----------+
|
|
|
|
------------
|
|
Other tokens
|
|
------------
|
|
|
|
.. index::
|
|
single: delimiters
|
|
single: other tokens
|
|
|
|
Other significant tokens are:
|
|
|
|
+----------+----------+----------+----------+----------+----------+
|
|
| ``{`` | ``}`` | ``[`` | ``]`` | ``.`` | ``:`` |
|
|
+----------+----------+----------+----------+----------+----------+
|
|
| ``::`` | ``'`` | ``;`` | ``"`` | ``@"`` | |
|
|
+----------+----------+----------+----------+----------+----------+
|
|
|
|
-----------
|
|
Literals
|
|
-----------
|
|
|
|
.. index::
|
|
single: literals
|
|
single: string literals
|
|
single: numeric literals
|
|
|
|
Squirrel accepts integer numbers, floating point numbers and string literals.
|
|
|
|
+-------------------------------+------------------------------------------+
|
|
| ``34`` | Integer number(base 10) |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``0xFF00A120`` | Integer number(base 16) |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``0753`` | Integer number(base 8) |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``'a'`` | Integer number |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``1.52`` | Floating point number |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``1.e2`` | Floating point number |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``1.e-2`` | Floating point number |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``"I'm a string"`` | String |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``@"I'm a verbatim string"`` | String |
|
|
+-------------------------------+------------------------------------------+
|
|
| ``@" I'm a`` | |
|
|
| ``multiline verbatim string`` | |
|
|
| ``"`` | String |
|
|
+-------------------------------+------------------------------------------+
|
|
|
|
Pesudo BNF
|
|
|
|
.. productionlist::
|
|
IntegerLiteral : [1-9][0-9]* | '0x' [0-9A-Fa-f]+ | ''' [.]+ ''' | 0[0-7]+
|
|
FloatLiteral : [0-9]+ '.' [0-9]+
|
|
FloatLiteral : [0-9]+ '.' 'e'|'E' '+'|'-' [0-9]+
|
|
StringLiteral: '"'[.]* '"'
|
|
VerbatimStringLiteral: '@''"'[.]* '"'
|
|
|
|
-----------
|
|
Comments
|
|
-----------
|
|
|
|
.. index:: single: comments
|
|
|
|
A comment is text that the compiler ignores but that is useful for programmers.
|
|
Comments are normally used to embed annotations in the code. The compiler
|
|
treats them as white space.
|
|
|
|
A comment can be ``/*`` (slash, asterisk) characters, followed by any
|
|
sequence of characters (including new lines),
|
|
followed by the ``*/`` characters. This syntax is the same as ANSI C.::
|
|
|
|
/*
|
|
this is
|
|
a multiline comment.
|
|
this lines will be ignored by the compiler
|
|
*/
|
|
|
|
A comment can also be ``//`` (two slashes) characters, followed by any sequence of
|
|
characters. A new line not immediately preceded by a backslash terminates this form of
|
|
comment. It is commonly called a *"single-line comment."*::
|
|
|
|
//this is a single line comment. this line will be ignored by the compiler
|
|
|
|
The character ``#`` is an alternative syntax for single line comment.::
|
|
|
|
# this is also a single line comment.
|
|
|
|
This to facilitate the use of squirrel in UNIX-style shell scripts.
|