f825e3311a | ||
---|---|---|
misc | ||
pic | ||
testing_files | ||
version0.7 | ||
version0.9 | ||
version0.18 | ||
version0.19 | ||
version1.0 | ||
version1.1 | ||
version1.2 | ||
version1.3 | ||
version2.0 | ||
version3.0 | ||
.gitignore | ||
NASAL语言教程-完整版.pdf | ||
README.md |
README.md
Nasal Interpreter
Nasal script language
Nasal is a script language that used in FlightGear.
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:
Push down automata
After many times of failure,i finally try to use PDA to do the parse work.
But something occurred,so i finally didn't make it.However you can still see this LL(1) and LR(0) parser in version 0.7 & 0.9 .
Parser
The parser can recognize some basic elements in resource program.
In version 1.1 you can use the fully-functional parser.
But there are still some differences such as:
(var a,b,c)=(1,2,3);
var (r,g,b)=color;
(a,b)=(b,a);
etc. cannot be recognized.
And each statement must have a ';' after it or you will be informed with 'error: expect a ';'' .
In version 2.0 these problems have been solved.
In version 2.0
(var a,b,c)=(1,2,3);
var (r,g,b)=color;
These two types of statements are both definition_expr.
(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).