- Notifications
You must be signed in to change notification settings - Fork0
A utility and CGI program which translates pseudocode to Javascript
License
cpp-tutor/pseudocode-compiler
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A utility and CGI program which translates AQA's GCSE pseudocode specification (course code 8525) to Javascript, ready for execution in a browser or by Node.JS/Spidermonkey.
I have written a series of articles about this project, which can be found athttps://learnmoderncpp.com:
- 1. Setting the scene
- 2. Abstract syntax tree
- 3. Generating a scanner
- 4. Generating a parser
- 5. Rules, statements and expressions
- 6. Compiler driver frontend
Note:
Both 32 and 64-bit executables for Windows are available from the releases page:
https://github.com/cpp-tutor/pseudocode-compiler/releases
Prerequisites:
Visual Studio 2019 or 2022 with C++ compiler supporting
/std:c++20
Both
win_flex.exe
andwin_bison.exe
fromhttps://github.com/lexxmark/winflexbison
Method:
Unzip the contents of the release zipfile to a new directory and place all of
win_flex.exe
,FlexLexer.h
win_bison.exe
anddata
into the same directoryOpen a Visual Studio command prompt and navigate to this directory
Run
nmake /f Makefile.nmake
and locate generatedpsc.exe
(Optional) Use
pscexamples.exe
to generatepscexamples.js
Prerequisites:
GNU C++ compiler (
g++
) supporting-std=c++20
Both
flex
andbison
, tested with flex 2.6.4 and bison 3.8.1
Method:
Unzip the contents of the release zipfile to a user directory and navigate to it
Run
make
to generatepsc
(Optional) Use
./pscexamples
to generatepscexamples.js
Simply runpsc.exe
or./psc
in a console/command prompt window to read from the keyboard and output to the console, redirections using<
and>
work equally well too. (Note: to end input under Linux useCtrl-D
, under WindowsCtrl-Z
followed byEnter
.) See the example programs in theprogs
directory.
Alternatively, specify an input filename, and optionally an output filename, to avoid the need for redirections:
./psc myprog.psc # outputs to myprog.js./psc input.psc output.js # outputs to output.js
The Javascript output is compatible with thejsNN
executable from Mozilla (supplied by the Debian packageslibmozjs-NN-dev
), and with NodeJS (see option-n
below). This output is not meant to be interesting but should always be correct, in case of an input (syntax) error, no output is generated.
Input options (immediately afterpsc
and before any redirections or filenames):
-h
(or/?
under Windows) outputs a help text and quits-v
(or/v
under Windows) outputs the version number and quits-n
(or/n
under Windows) prepends a small support library to the output program, which supports NodeJS. Note: you may need to runnpm install readline-sync
(once) to allow support for NodeJS.
The suppliedpscweb.html
web-page together withpscweb.css
andpscweb.js
can be used as a front-end to the compiler utility. Under Linux/Apache these files would need to be copied to/var/www/html/
or/srv/http/
, or under Windows toC:\inetpub\wwwroot\
.
Permissions would need to be given to the utility to run as a CGI program, under Linux/Apache it would typically need to be copied to/usr/lib/cgi-bin/
or/srv/http/cgi-bin/
, or under Windows to the same directory as before.
The minimum setup under Debian/Ubuntu is:
$ sudo apt install apache2$ sudo a2enmod cgi$ sudo cp pscweb.* /var/www/html/$ sudo cp psc /usr/lib/cgi-bin/
(Possibly withsudo a2ensite ...
and restarting theapache2
service too.) See your individual distro's documentation for how to install and set up a webserver.
Windows needs Internet Information Services (IIS) Manager to be enabled and set up together with a permissions rule for the executable binary, see documentation for your version of Windows (tested under Windows 10). Note thatsome editing ofpscweb.js
is necessary in function run():/cgi-bin/psc?
needs to be changed to./psc.exe?
(note the.
), this is assuming that the utility is located in the same directory as the web-page.
Note that inputs to the running program have to be entered into the text field bottom-rightbefore the program is run, these being separated by commas. Also the user is prompted to clear the output window when it is full. These are the only significant differences to running the Javascript in a console window.
This software is released under the highly permissive MIT License. If you do modify or improve parts of this software, especially the web front-end, I hope you would want to share your efforts, but this is not a requirement.
For this software to be useful to school students, setting up the web interface would be of great advantage, as the edit/compile/run cycle necessary for using the console has an associated learning curve.
Please note that this software isnot either endorsed or supported by AQA Exam Board, and also its author is not affiliated to them in any way.
Pseudocode Specification as an unrestricted download from the AQA website:
https://filestore.aqa.org.uk/resources/computing/AQA-8525-NG-PC.PDF
Note that the only deliberate changes from the specification are:
SUBROUTINE
parameters in a definition needing to be followed by: Type
(as forRECORD
fields), but not where theSUBROUTINE
is called with arguments.Initializing a variable from a
RECORD
type needs curly braces{
and}
and not plain parentheses, this is due to the earlier design of the compiler which means it cannot otherwise distinguish from aSUBROUTINE
call (with the name of theRECORD
)
Updates:
Compound assignment of variables from
RECORD
s (in addition to field assignment) now appears in the specification above, as doesOUTPUT
ting of a comma-separated list ofStringExp
s. Support for both of these is provided.Version 1.00 released! Other release downloads have been removed as they contained bugs, but sources for these are still available via tags.
About
A utility and CGI program which translates pseudocode to Javascript
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.