Victor Fernandes 668afe99c2 | ||
---|---|---|
buffer | ||
orig_big_file_test | ||
orig_test_files | ||
output_files | ||
.gitattributes | ||
.gitignore | ||
Ass01_W17.pdf | ||
Assignment1_Victor Fernandes_040772243.docx | ||
INSTRUCTIONS.txt | ||
Makefile | ||
PLATYPUS Grammar Specification.md | ||
PLATYPUS_Regex.md | ||
README.md | ||
buffer.c | ||
buffer.h | ||
platy_bt.c | ||
platy_st.c | ||
scanner.c | ||
table.h | ||
templates.txt | ||
token.h |
README.md
PLATYPUS
Buffer Descriptor for the PLATYPUS language specification
Building
In macOS/Linux
Requires
gcc (tested in version 6.3.x) or clang (tested under LLVM clang-0800.0.42.1)
make [gcc | clang]
- Default is to build both versions (this is an aftermath of testing behaviour from different compilers)
- It is safe to modify the default to either gcc or clang if you don't have one of them
Windows
Requires
msvc
(tested under Visual Studio 2015 with Update 3, however VS2013 shouldn't behave abnormally either)- Disable language extensions (use ANSI C)
Running
- macOS/linux
$ ./buffer_<compiler> <file> [f | a | m] > <out_file>
- Windows
$ buffer <file> f | a | m] > <out_file>
Usage
- F: fixed capacity mode. Buffe will not auto-resize if not enough space for the file
- A: additive mode: Buffer will resize in a linear increment.
- M: multiplicative mode: Buffer will resize based on a pre-set multiplier based on remaining allowed memory space (
$SHRT_MAX bytes
)
Notes
This is in no way complete, it is missing a scanner implementation, parser, symbol table, etc.
You can modify the initial capacity and increment factor defined in platy_bt.c
(should really make that a command line parameter in a future release)
- Increment factor range for additive mode:
1 - 255
. (setting this to 0 implies fixed mode, regardless of the mode given in the command line) - Initial capacity range (in bytes):
0 - 32767 (SHRT_MAX)
- This is due to my environment's install locations for the C include libraries:
- Inside
buffer.h
, change the#include
statement frommm_malloc.h
tomalloc.h
, depending on what your compiler uses. Homebrew gcc6 installs on macOS might need this, but Linux and Windows generally will usemalloc.h
- Inside