Jump to content

Writing a recursive decent parser in Autoit


TheAutomator
 Share

Recommended Posts

I'm writing a recursive decent parser in Autoit!

The programming language i'm making is called HighLevel.
I'm doing this for learning purposes, because it's fun and because I can implement it into my other project:
Fullscreen Console With custom programming language!

 

It's not easy...

In Autoit you don't have objects like in Java or Visual Basic, so I had to figure out a way to still convert the code to an abstract syntax tree.
I used nested array's and array based dictionary's instead of objects.
The code is still very dirty and I need to make a lot of modifications but if you're careful with testing you'll see what it can do already.

 

Console window

Because this code eventually will get implemented into my console project I crafted a nice little console window (with a custom sci-fi looking theme, yeah i was a little bored haha).
{ESC} is your panic button for now, it terminates the script completely.
If you get an error while opening a script the text will turn red.
To minimize it press the blue button, to close it use the red one, to drag the gui just grab it on one of the sides.
The console window will display what you write to it with your "HighLevel-script" and some additional information:

Naamloos.jpg.508e637083c0c28635582309830e8d7c.jpg

 

How to test it:

Download: HighLevel.Au3, Debug.Au3 (includes a function to display nested arrays for debugging), GUI.bmp (for the console)
Compile the Autoit code to EXE.
The GUI.bmp must be in the same folder as the EXE file!
Write a
HighLevel-script (text file) and drag it into the compiled autoit-exe.
The custom made little console window will pop up in the left top corner of your screen and your
HighLevel-script (the text file) will be interpreted and executed.

 

The Language:

exit script:

    Abort
    
show / hide the console:

    Show
    Hide
    
write to/clear the console:

    Write 'this is a ''string''!'
    Clear
    
variables:
    test_var_1 = 123
    some_list = ['a', 5, true]
    some_list[1] = 3
    math = 1 + 2 * 3 / 4 - -5 & test_var

beep (under construction):

    Beep F, optD

wait X seconds:
    Wait X
    
Messages:

    Message 'Hello World!'
    
move/click the mouse:

    Move X, Y
    Click
    
send keys (under construction):

    Send 'HighLevel', True
    
if's:

    If false
    ElseIf true
        # this part will run
    Else
    End

subs:

    Sub X
        # do stuff
    End

    Call X
    
for loops:

    For X = 1 to 10
        # X iterates
    End

Values:

    Input 'Give me input'
    Random
    YesNo 'yes or no'

operators:

    + - * / & > = ! < ( ) And Not Or

 

Example script:

# my first HighLevel script

message 'Hello World!'
message 'Lets write to the console...'

clear # clear the console...

list = ['a', 16, true]
for i = 0 to 2
    write list[i]
    wait 1
end

sub test
    if YesNo 'would you like to quit?'
        message 'Goodbye!'
        abort
    else
        write 1 + 2 * 3 & ' math!'
    end
end

call test

 

test script.HighLevel

GUI.bmp

Debug.au3

HighLevel.au3

Edited by TheAutomator
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...