Skip to content

Commit 4a5a0f1

Browse files
committed
v241212.1
1 parent ba73af4 commit 4a5a0f1

16 files changed

+1375
-34
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ Here in the repository is a folder called `scripts` containing some sample scrip
4848
`tests.ecs` is a test program containing many of the EasyCoder features
4949
`fizzbuzz.ecs` is a simple programming challenge often given at job interviews
5050

51+
## Graphical programmming
52+
**_EasyCoder_** is currently being extended to include a graphical programming environment. A single demo script `graphics-demo.ecs` is included in the `scripts` directory. To run it, first install the Python graphics library if it's not already present on your system. On Linux this is done with `sudo apt install python3-tk`. On Windows it's `pip install tk`. Then give the command `easycoder -g scripts/graphics-demo.ecs`.
53+
54+
As development progresses this demo program will be extended to include new features.
55+
5156
## EasyCoder programming reference
5257

5358
The language comprises a general-purpose core package, which can be enhanced by plugins to provide special features on demand.
-24.3 KB
Binary file not shown.

dist/easycoder-241211.3.tar.gz

-33.9 KB
Binary file not shown.
29.2 KB
Binary file not shown.

dist/easycoder-241212.1.tar.gz

42.9 KB
Binary file not shown.

easycoder/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
from .ec_program import *
99
from .ec_timestamp import *
1010
from .ec_value import *
11+
from .ec_graphics import *
1112

12-
__version__ = "241211.3"
13+
__version__ = "241212.1"

easycoder/ec_compiler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def warning(self, message):
101101

102102
def showWarnings(self):
103103
for warning in self.warnings:
104-
print(f'Line {self.getLino() + 1}: {warning}')
104+
print(f'Warning: Line {self.getLino() + 1}: {warning}')
105105

106106
def getSymbolRecord(self):
107107
token = self.getToken()

easycoder/ec_core.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ def k_add(self, command):
3838
command['target'] = self.getToken()
3939
self.add(command)
4040
return True
41-
self.warning(f'core.add: Expected value holder')
41+
self.warning(f'Core.add: Expected value holder')
4242
else:
4343
# Here we have 2 values so 'giving' must come next
4444
command['value2'] = self.getValue()
4545
if self.nextToken() == 'giving':
4646
command['target'] = self.nextToken()
4747
self.add(command)
4848
return True
49-
self.warning(f'core.add: Expected "giving"')
49+
self.warning(f'Core.add: Expected "giving"')
5050
return False
5151

5252
def r_add(self, command):
@@ -90,7 +90,7 @@ def k_append(self, command):
9090
command['target'] = symbolRecord['name']
9191
self.add(command)
9292
return True
93-
self.warning(f'Variable "{symbolRecord["name"]}" does not hold a value')
93+
self.warning(f'Core.append: Variable "{symbolRecord["name"]}" does not hold a value')
9494
return False
9595

9696
def r_append(self, command):
@@ -248,7 +248,7 @@ def k_decrement(self, command):
248248
command['target'] = self.getToken()
249249
self.add(command)
250250
return True
251-
self.warning(f'Variable "{symbolRecord["name"]}" does not hold a value')
251+
self.warning(f'Core.decrement: Variable "{symbolRecord["name"]}" does not hold a value')
252252
return False
253253

254254
def r_decrement(self, command):
@@ -272,9 +272,9 @@ def k_delete(self, command):
272272
self.add(command)
273273
return True
274274
else:
275-
self.warning(f'"of" expected; got {self.getToken()}')
275+
self.warning(f'Core.delete: "of" expected; got {self.getToken()}')
276276
else:
277-
self.warning(f'"file" or "property" expected; got {token}')
277+
self.warning(f'Core.delete: "file" or "property" expected; got {token}')
278278
return False
279279

280280
def r_delete(self, command):
@@ -570,7 +570,7 @@ def k_increment(self, command):
570570
command['target'] = self.getToken()
571571
self.add(command)
572572
return True
573-
self.warning(f'Variable "{symbolRecord["name"]}" does not hold a value')
573+
self.warning(f'Core.increment: Variable "{symbolRecord["name"]}" does not hold a value')
574574
return False
575575

576576
def r_increment(self, command):
@@ -729,7 +729,7 @@ def k_open(self, command):
729729
else:
730730
FatalError(self.compiler, f'Variable "{self.getToken()}" is not a file')
731731
else:
732-
self.warning(f'core.open: Variable "{self.getToken()}" not declared')
732+
self.warning(f'Core.open: Variable "{self.getToken()}" not declared')
733733
return False
734734

735735
def r_open(self, command):
@@ -1215,7 +1215,7 @@ def k_take(self, command):
12151215
command['target'] = self.getToken()
12161216
self.add(command)
12171217
return True
1218-
self.warning(f'core.take: Expected value holder')
1218+
self.warning(f'Core.take: Expected value holder')
12191219
else:
12201220
# Here we have 2 values so 'giving' must come next
12211221
command['value2'] = self.getValue()
@@ -1227,7 +1227,7 @@ def k_take(self, command):
12271227
else:
12281228
FatalError(self.program.compiler, f'\'{self.getToken()}\' is not a symbol')
12291229
else:
1230-
self.warning(f'core.take: Expected "giving"')
1230+
self.warning(f'Core.take: Expected "giving"')
12311231
return False
12321232

12331233
def r_take(self, command):
@@ -1402,6 +1402,8 @@ def incdec(self, command, mode):
14021402
RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
14031403
return None
14041404
value = self.getSymbolValue(symbolRecord)
1405+
if value == None:
1406+
RuntimeError(self.program, f'{symbolRecord["name"]} has not been initialised')
14051407
if mode == '+':
14061408
value['content'] += 1
14071409
else:
@@ -1467,7 +1469,7 @@ def compileValue(self):
14671469
if symbolRecord['valueHolder']:
14681470
value['target'] = symbolRecord['name']
14691471
return value
1470-
self.warning(f'Token \'{self.getToken()}\' does not hold a value')
1472+
self.warning(f'Core.compileValue: Token \'{self.getToken()}\' does not hold a value')
14711473
return None
14721474

14731475
if token == 'property':
@@ -1478,7 +1480,7 @@ def compileValue(self):
14781480
if symbolRecord['valueHolder']:
14791481
value['target'] = symbolRecord['name']
14801482
return value
1481-
self.warning(f'Token \'{self.getToken()}\' does not hold a value')
1483+
self.warning(f'Core.compileValue: Token \'{self.getToken()}\' does not hold a value')
14821484
return None
14831485

14841486
if token == 'arg':
@@ -1640,7 +1642,7 @@ def compileValue(self):
16401642
return value
16411643
return None
16421644

1643-
self.warning(f'Core: Unknown token {token}')
1645+
self.warning(f'Core.compileValue: Unknown token "{token}"')
16441646
return None
16451647

16461648
#############################################################################
@@ -2115,7 +2117,7 @@ def compileCondition(self):
21152117
condition.type = 'boolean'
21162118
return condition
21172119

2118-
self.warning(f'I can\'t get a conditional:')
2120+
self.warning(f'Core.compileCondition: I can\'t get a conditional:')
21192121
return None
21202122

21212123
def isNegate(self):

0 commit comments

Comments
 (0)