forked from xxq250/Nasal-Interpreter
65 lines
1.5 KiB
Markdown
65 lines
1.5 KiB
Markdown
# Nasal Interpreter
|
|
|
|
[](http://wiki.flightgear.org/File:Nasallogo3.png)
|
|
|
|
# Nasal script language
|
|
|
|
[Nasal](http://wiki.flightgear.org/Nasal_scripting_language) is a script language that used in [FlightGear](https://www.flightgear.org/).
|
|
|
|
There is a Nasal console in FlightGear but sometimes it is not so easy for every developer to use.
|
|
|
|
So this is an interpreter for Nasal written by C++.
|
|
|
|
The interpreter is still in development.Anyone who interested in this could also join us!
|
|
|
|
# Lexical Analysis
|
|
|
|
What do it's outputs look like?
|
|
|
|
> ( identifier | start )
|
|
|
|
> ( operator | ; )
|
|
|
|
> ( reserve word | print )
|
|
|
|
> ( operator | ( )
|
|
|
|
> ( string | Engine started )
|
|
|
|
> ( operator | ) )
|
|
|
|
This is what it outputs.
|
|
|
|
And the flow chart of lexer is here:
|
|
|
|
[](https://github.com/ValKmjolnir/Nasal-Interpreter/blob/master/pic/nasal_lexer.png)
|
|
|
|
# Parser
|
|
|
|
In __version 2.0__
|
|
```javascript
|
|
(var a,b,c)=(1,2,3);
|
|
var (r,g,b)=color;
|
|
```
|
|
These two types of statements are both definition_expr.
|
|
|
|
```javascript
|
|
(a,b,c)=(1,2,3);
|
|
(a,b)=(b,a);
|
|
```
|
|
This type of statement is multi_assignment.
|
|
|
|
__And to check if an expr in '(' ')' is multi_scalar or multi_id__
|
|
|
|
__i used bool nasal_parse::check_multi_scalar() and bool nasal_parse::check_multi_assignment()__
|
|
|
|
# Abstract Syntax Tree
|
|
|
|
In __version 1.2__ the ast has been completed.
|
|
|
|
# Version 2.0
|
|
|
|
a completed ast-interpreter with unfinished lib functions.
|
|
|
|
a new byte code interpreter is in progress(version 3.0).
|