forked from xxq250/Nasal-Interpreter
234 lines
2.9 KiB
Markdown
234 lines
2.9 KiB
Markdown
# Nasal-Interpreter
|
|
|
|
# Nasal
|
|
|
|
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!
|
|
|
|
# Now complete all types
|
|
|
|
var: int float double std::string char long long int
|
|
|
|
NasalList: array in nasal []
|
|
|
|
append
|
|
|
|
setsize
|
|
|
|
subvec
|
|
|
|
pop
|
|
|
|
sort
|
|
|
|
NasalHash: Hash in nasal {}
|
|
|
|
append
|
|
|
|
delete
|
|
|
|
contains
|
|
|
|
keys
|
|
|
|
# Now complete Lexical Analysis!
|
|
|
|
What it looks like?
|
|
|
|
( Identifier | engineTimer )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | start )
|
|
|
|
( Operator | ( )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( ReserveWord | print )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "Engine started" )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Operator | } )
|
|
|
|
( ReserveWord | var )
|
|
|
|
( Identifier | stopEngine )
|
|
|
|
( Operator | = )
|
|
|
|
( ReserveWord | func )
|
|
|
|
( Operator | ( )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | { )
|
|
|
|
( Identifier | props )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | getNode )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 1 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | setValue )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/controls/engines/engine/started" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 0 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Identifier | props )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | getNode )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 1 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | setValue )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/fdm/jsbsim/external_reactions/engine/magnitude" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 0 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Identifier | props )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | getNode )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 1 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | setValue )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/systems/electrical/e-tron/switch/bat-fwd-eng" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 0 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Identifier | props )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | getNode )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 1 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | setValue )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "/systems/electrical/e-tron/switch/bat-bwd-eng" )
|
|
|
|
( Operator | , )
|
|
|
|
( Number | 0 )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Identifier | engineTimer )
|
|
|
|
( Operator | . )
|
|
|
|
( Identifier | stop )
|
|
|
|
( Operator | ( )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( ReserveWord | print )
|
|
|
|
( Operator | ( )
|
|
|
|
( String | "Engine stopped" )
|
|
|
|
( Operator | ) )
|
|
|
|
( Operator | ; )
|
|
|
|
( Operator | } )
|
|
|
|
This is what it outputs.
|