fd8d3acfed | ||
---|---|---|
pic | ||
test | ||
.gitignore | ||
README.md | ||
lib.nas | ||
main.cpp | ||
nasal.ebnf | ||
nasal.h | ||
nasal_ast.h | ||
nasal_builtin.h | ||
nasal_codegen.h | ||
nasal_enum.h | ||
nasal_gc.h | ||
nasal_import.h | ||
nasal_lexer.h | ||
nasal_misc.h | ||
nasal_parse.h | ||
nasal_runtime.h |
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.We really need your support!
Why Writing Nasal Interpreter
Nasal is a script language first used in Flightgear.
But in last summer holiday, members in FGPRC told me that it is hard to debug with nasal-console in Flightgear, especially when checking syntax error.
So i tried to write a new interpreter to help them checking syntax error and even, runtime error.
I wrote the lexer, parser and runtime(nasal virtual machine/ast-runtime virtual machine) to help checking errors.
They found it easier for them to check errors before copying nasal-codes in nasal-console in Flightgear to test.
Lexical Analysis
The flow chart of lexer is here:
Parser
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().
In version 3.0
I refactored parser and make it easier to maintain.
the EBNF is also refactored.
Abstract Syntax Tree
In version 1.2 the ast has been completed.
In version 3.0 the ast is refactored and is now easier to read and maintain.
Version 2.0
a completed ast-interpreter with unfinished lib functions.
Version 3.0
ast-interpreter uses new techniques so it can run codes more efficiently.
byte-code-interpreter is in progress(i need a lot of time to learn that :( ).