Nasal-Interpreter/README.md

2.2 KiB

Nasal Interpreter

nasal_new_logo

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:

nasal_lexer.png

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).