rbaltrusch / natscript Goto Github PK
View Code? Open in Web Editor NEWThe Natscript interpreter, a custom programming language, with a natural English-like syntax.
License: MIT License
The Natscript interpreter, a custom programming language, with a natural English-like syntax.
License: MIT License
Describe the bug
Index out of range exception raised
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A character '6' printed to console was expected.
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
I don't think this is neded.
Additional context
I think that that the 1
should be replaced with -1
in this snippet:
while self.token_stack and self.token_stack[1].satisfied:
yield self.token_stack.pop()
(lines 39-40 in parse()
in interpreter\parsing.py), because it works then and the rest of scripts that had worked before work too.
Currently there is no documentation of the language features, besides some example scripts.
Language features should be documented in the wiki to elaborate on the details of the language.
Extra blank lines between statements produce errors.
The following code runs fine:
set a to 1
print it
The following code throws an Interpreter error:
set a to 1
//(blank line)
print it
- InterpreterError: The following block had no type to be interpreted: Syntax Tree containing [Token(LINEBREAK, None), Token(PRINT, None)]!
Extra blank lines should not cause the interpreter to not be able to parse the *.nat file anymore and should instead be ignored.
Windows 10.
Functions currently do not support input arguments or return values, which significantly limit their usefulness.
Function definitions should optionally include required input arguments or keyword arguments, e.g.
define function my_function taking arg1 and arg2 as {
...
}
Function calls should optionally include passed arguments, e.g.:
call my_function for arg1
Currently, the language only supports scalar integer and float types. Lists and iteration through them via a for-loop, for-each or a map statement would significantly increase the flexibility and usefulness of the language.
Float values in the example script example2.nat are not parsed properly, as source code strings, such as "1.5", are preprocessed by the lexer and split into three parts ("1", ".", "5"), which then cannot be recognized as a proper float value. As a result the script fails, as it contains an unexpected token (".").
To Reproduce
Traceback (most recent call last):
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\main.py", line 23, in <module>
! tokens = list(lex.lex(file_contents))
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\lexer.py", line 16, in lex
! token = self.token_factory.create_token(s)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\token_.py", line 35, in create_token
- raise exceptions.LexError(token, self.line_number)
LexError: Line 8: . was not expected at this time!
Expected behavior
Float values shouldnt be split by the preprocessing logic in the Lexer.
Occurs on main branch (commit 60a8bf9).
The bug should be caused by commit 96b8248.
The language currently does not support file input or output commands. Even simple file handling, such as open, read, write and close would significantly add to the usefulness and useability of the language.
Example implementation:
open example.txt and read it
close it
open example.txt as file
write my_data to file
close it
It would be ideal if files would automatically close once the file action is successfully done and the file handle is no longer needed (or an error occured), similar to how context managers work in Python.
Inner scopes do not have access to variables defined in outer scopes. This makes it impossible to access global variables, define closures or even call a function inside another function defined elsewhere, e.g.
define function a as {
print 1
}
define function b as {
#this will fail because it doesnt have access to outer scope
call a
}
To reproduce this example, run the following code, which assigns 1 to a global variable b, then tries to access this variable b to print it inside an inner scope.
set b to 1
set a to {print b} and call it
The example above results in the following exception:
Traceback (most recent call last):
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\main.py", line 25, in <module>
! inter.interpret(syntax_block)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\interpreter.py", line 26, in interpret
! raise e
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\interpreter.py", line 23, in interpret
! token.run(self)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\token_.py", line 75, in run
! function(interpreter)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\tokens.py", line 188, in _run
! function.get_value()(interpreter)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\tokens.py", line 164, in run_tokens
! token.run(interpreter)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\token_.py", line 75, in run
! function(interpreter)
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\tokens.py", line 73, in _run
! print(value.get_value())
File "D:\Alle_Dateien\Code\Python\NatScript Interpreter\interpreter\token_.py", line 152, in get_value
! raise exceptions.UndefinedVariableException(self)
- UndefinedVariableException: Line 2: Tried to access undefined variable b!
Tested with Python 3.8.3, Win10.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.