Computer scientists and software engineers depend on tools that interpret Little Languages (Bentley, UNC '76) frequently in their day-to-day work: command-line shells, project build system configurations, regular expressions, utility programs, documentation markup languages, modal text editors, and so on. As these languages are numerous and domain-specific, our focus will be on their first principles, common challenges, implementations, and limitations.
This course will explore the interpretation and applications of little languages through case studies on standard programming environment tools with historical significance, such as grep
, make
, bash
, vim
, and more. This course highlights important ideas in computational theory through direct, pragmatic applications in text pattern matching and structured language processing.
You will gain experience working in a systems language appropriate for implementing command-line tools with their own little languages. You will gain comfort working in a Unix-like programming environment and knowledge of its standard tooling and utilities. You will learn to make use of a Unix-like operating system's facilities and APIs for file system input/output, process management, and memory management.
In this course, you will:
Implement the essences of practical, historically significant Unix utilities, each with its own little language.
dc
(1969) a calculator whose simple, reverse-polish notation language commands a virtual stack machine. It is the oldest little language in Unix.bc
(1975), the successor to dc
, is an infix-based context free language needing a pushdown automata equivalent to parse. It will be implemented, as it was historically, as a frontend translator for dc
.grep
(1974) is a regular expression pattern matching tool still widely used today. Its implementation will construct and simulate a non-deterministic finite state machine.sh
(1977) the interpretation of Bourne's shell, or command-line interpreter, introduces fundamental operating systems concepts.Be introduced to, or reinforce your understanding of, first principles in computational theory and structured language processing.
Gain experience with compiled systems languages appropriate for implementing command-line utilities which interpret little languages.
malloc
, calloc
, free
)null
and costly exception handlingPractice software engineering in a Unix-like operating system programming environment to gain fundamental skills and knowledge.
bash
)
stdin
, stdout
, stderr
make
)vim
)sed
, awk
, grep
)git
)