From 2e15c1352eb1322afae1a5b2e17bf669bb93d49b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Di=20Guardia?= Date: Wed, 28 Sep 2022 09:28:41 +0200 Subject: [PATCH] automated commit TP3 --- MiniC/.coveragerc | 9 + MiniC/.gitignore | 16 + MiniC/Lib/Errors.py | 18 + MiniC/Makefile | 99 ++++++ MiniC/MiniC.g4 | 141 ++++++++ MiniC/MiniCC.py | 310 ++++++++++++++++++ MiniC/README-interpreter.md | 32 ++ MiniC/TP03/MiniCInterpretVisitor.py | 178 ++++++++++ MiniC/TP03/MiniCTypingVisitor.py | 147 +++++++++ .../tests/provided/examples-types/bad_def01.c | 13 + .../provided/examples-types/bad_type00.c | 10 + .../provided/examples-types/bad_type01.c | 14 + .../provided/examples-types/bad_type02.c | 11 + .../provided/examples-types/bad_type03.c | 10 + .../provided/examples-types/bad_type04.c | 11 + .../examples-types/bad_type_bool_bool.c | 9 + .../provided/examples-types/double_decl00.c | 12 + MiniC/TP03/tests/provided/examples/bad_main.c | 11 + .../tests/provided/examples/test_assign.c | 13 + .../tests/provided/examples/test_compare.c | 47 +++ .../TP03/tests/provided/examples/test_expr.c | 11 + .../TP03/tests/provided/examples/test_print.c | 15 + .../tests/provided/examples/test_print_int.c | 9 + .../tests/provided/examples/test_str_assign.c | 11 + .../tests/provided/strcat/test_string01.c | 14 + .../tests/provided/strcat/test_string02.c | 16 + .../tests/provided/strcat/unititialized_str.c | 13 + .../TP03/tests/provided/uninitialised/bool.c | 16 + .../TP03/tests/provided/uninitialised/float.c | 13 + MiniC/TP03/tests/provided/uninitialised/int.c | 13 + MiniC/TP03/tests/students/README.md | 1 + MiniC/printlib.h | 20 ++ MiniC/pyproject.toml | 2 + MiniC/test_expect_pragma.py | 191 +++++++++++ MiniC/test_interpreter.py | 57 ++++ PLANNING.md | 10 +- TP03/arith-visitor/.gitignore | 2 + TP03/arith-visitor/Arit.g4 | 33 ++ TP03/arith-visitor/Makefile | 23 ++ TP03/arith-visitor/MyAritVisitor.py | 58 ++++ TP03/arith-visitor/arit.py | 28 ++ TP03/arith-visitor/myexample | 5 + TP03/arith-visitor/test_arith_visitor.py | 36 ++ TP03/tp3.pdf | Bin 0 -> 197465 bytes TP03/tree/Tree.g4 | 16 + 45 files changed, 1723 insertions(+), 1 deletion(-) create mode 100644 MiniC/.coveragerc create mode 100644 MiniC/.gitignore create mode 100644 MiniC/Lib/Errors.py create mode 100644 MiniC/Makefile create mode 100644 MiniC/MiniC.g4 create mode 100644 MiniC/MiniCC.py create mode 100644 MiniC/README-interpreter.md create mode 100644 MiniC/TP03/MiniCInterpretVisitor.py create mode 100644 MiniC/TP03/MiniCTypingVisitor.py create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_def01.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type00.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type01.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type02.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type03.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type04.c create mode 100644 MiniC/TP03/tests/provided/examples-types/bad_type_bool_bool.c create mode 100644 MiniC/TP03/tests/provided/examples-types/double_decl00.c create mode 100644 MiniC/TP03/tests/provided/examples/bad_main.c create mode 100644 MiniC/TP03/tests/provided/examples/test_assign.c create mode 100644 MiniC/TP03/tests/provided/examples/test_compare.c create mode 100644 MiniC/TP03/tests/provided/examples/test_expr.c create mode 100644 MiniC/TP03/tests/provided/examples/test_print.c create mode 100644 MiniC/TP03/tests/provided/examples/test_print_int.c create mode 100644 MiniC/TP03/tests/provided/examples/test_str_assign.c create mode 100644 MiniC/TP03/tests/provided/strcat/test_string01.c create mode 100644 MiniC/TP03/tests/provided/strcat/test_string02.c create mode 100644 MiniC/TP03/tests/provided/strcat/unititialized_str.c create mode 100644 MiniC/TP03/tests/provided/uninitialised/bool.c create mode 100644 MiniC/TP03/tests/provided/uninitialised/float.c create mode 100644 MiniC/TP03/tests/provided/uninitialised/int.c create mode 100644 MiniC/TP03/tests/students/README.md create mode 100644 MiniC/printlib.h create mode 100644 MiniC/pyproject.toml create mode 100644 MiniC/test_expect_pragma.py create mode 100644 MiniC/test_interpreter.py create mode 100644 TP03/arith-visitor/.gitignore create mode 100644 TP03/arith-visitor/Arit.g4 create mode 100644 TP03/arith-visitor/Makefile create mode 100644 TP03/arith-visitor/MyAritVisitor.py create mode 100644 TP03/arith-visitor/arit.py create mode 100644 TP03/arith-visitor/myexample create mode 100644 TP03/arith-visitor/test_arith_visitor.py create mode 100644 TP03/tp3.pdf create mode 100644 TP03/tree/Tree.g4 diff --git a/MiniC/.coveragerc b/MiniC/.coveragerc new file mode 100644 index 0000000..f1fcf13 --- /dev/null +++ b/MiniC/.coveragerc @@ -0,0 +1,9 @@ +[report] +exclude_lines = + pragma: no cover + raise MiniCInternalError + raise MiniCUnsupportedError + if debug: + if debug_graphs: + if self._debug: + if self._debug_graphs: diff --git a/MiniC/.gitignore b/MiniC/.gitignore new file mode 100644 index 0000000..01c7c6d --- /dev/null +++ b/MiniC/.gitignore @@ -0,0 +1,16 @@ +/MiniCLexer.py +/MiniCParser.py +/MiniCVisitor.py +/TP*/tests/**/*.s +/TP*/**/*.riscv +/TP*/**/*-naive.s +/TP*/**/*-all_in_mem.s +/TP*/**/*-smart.s +/TP*/**/*.trace +/TP*/**/*.dot +/TP*/**/*.dot.pdf +/MiniC-stripped.g4 +.coverage +htmlcov/ +doc/api +doc/_build diff --git a/MiniC/Lib/Errors.py b/MiniC/Lib/Errors.py new file mode 100644 index 0000000..e466aa4 --- /dev/null +++ b/MiniC/Lib/Errors.py @@ -0,0 +1,18 @@ +class MiniCRuntimeError(Exception): + pass + + +class MiniCInternalError(Exception): + pass + + +class MiniCUnsupportedError(Exception): + pass + + +class MiniCTypeError(Exception): + pass + + +class AllocationError(Exception): + pass diff --git a/MiniC/Makefile b/MiniC/Makefile new file mode 100644 index 0000000..ee9b977 --- /dev/null +++ b/MiniC/Makefile @@ -0,0 +1,99 @@ +MYNAME = JohnDoe +PACKAGE = MiniC +# Example: stop at the first failed test: +# make PYTEST_OPTS=-x test +PYTEST_OPTS = +# Run the whole test infrastructure for a subset of test files e.g. +# make TEST_FILES='TP03/**/bad*.c' test +ifdef TEST_FILES +export TEST_FILES +endif + +ifdef SSA +MINICC_OPTS+=--ssa +endif + +ifdef SSA_OPTIM +MINICC_OPTS+=--ssa-optim +endif + +ifdef TYPECHECK_ONLY +MINICC_OPTS+=--disable-codegen +endif + +ifdef PARSE_ONLY +MINICC_OPTS+=--disable-typecheck --disable-codegen +endif + +export MINICC_OPTS + +PYTEST_BASE_OPTS=-vv -rs --failed-first --cov="$(PWD)" --cov-report=term --cov-report=html + +ifndef ANTLR4 +abort: + $(error variable ANTLR4 is not set) +endif + +all: antlr + +.PHONY: antlr +antlr MiniCLexer.py MiniCParser.py: $(PACKAGE).g4 + $(ANTLR4) $< -Dlanguage=Python3 -visitor -no-listener + +main-deps: MiniCLexer.py MiniCParser.py TP03/MiniCInterpretVisitor.py TP03/MiniCTypingVisitor.py + +.PHONY: test test-interpret test-codegen clean clean-tests tar antlr + + +test: test-interpret + + +test-pyright: antlr + pyright . + +test-interpret: test-pyright test_interpreter.py main-deps + python3 -m pytest $(PYTEST_BASE_OPTS) $(PYTEST_OPTS) test_interpreter.py + + +# Test for naive allocator (also runs test_expect to check // EXPECTED directives): +test-naive: test-pyright antlr + python3 -m pytest $(PYTEST_BASE_OPTS) $(PYTEST_OPTS) ./test_codegen.py -k 'naive or expect' + +# Test for all but the smart allocator, i.e. everything that lab4 should pass: +test-notsmart: test-pyright antlr + python3 -m pytest $(PYTEST_BASE_OPTS) $(PYTEST_OPTS) ./test_codegen.py -k 'not smart' + +# Test just the smart allocator (quicker than tests) +test-smart: test-pyright antlr + python3 -m pytest $(PYTEST_BASE_OPTS) $(PYTEST_OPTS) ./test_codegen.py -k 'smart' + +# Complete testsuite (should pass for lab5): +test-codegen: test-pyright antlr + python3 -m pytest $(PYTEST_BASE_OPTS) $(PYTEST_OPTS) ./test_codegen.py + +tar: clean + dir=$$(basename "$$PWD") && cd .. && \ + tar cvfz $(MYNAME).tgz --exclude="*.riscv" --exclude=".git" --exclude=".pytest_cache" \ + --exclude="htmlcov" "$$dir" + @echo "Created ../$(MYNAME).tgz" + +# Remove any assembly file that was created by a test. +# Don't just find -name \*.s -exec rm {} \; because there may be legitimate .s files in the testsuite. +define CLEAN +import glob +import os +for f in glob.glob("**/tests/**/*.c", recursive=True): + for s in ("{}-{}.s".format(f[:-2], test) for test in ("naive", "smart", "gcc", "all_in_mem")): + try: + os.remove(s) + print("Removed {}".format(s)) + except OSError: + pass +endef +export CLEAN +clean-tests: + @python3 -c "$$CLEAN" + +clean: clean-tests + find . \( -iname "*~" -or -iname ".cache*" -or -iname "*.diff" -or -iname "log*.txt" -or -iname "__pycache__" -or -iname "*.tokens" -or -iname "*.interp" \) -print0 | xargs -0 rm -rf \; + rm -rf *~ $(PACKAGE)Parser.py $(PACKAGE)Lexer.py $(PACKAGE)Visitor.py .coverage .benchmarks diff --git a/MiniC/MiniC.g4 b/MiniC/MiniC.g4 new file mode 100644 index 0000000..a1dad31 --- /dev/null +++ b/MiniC/MiniC.g4 @@ -0,0 +1,141 @@ +grammar MiniC; + +prog: function* EOF #progRule; + +// For now, we don't have "real" functions, just the main() function +// that is the main program, with a hardcoded profile and final +// 'return 0'. +function: INTTYPE ID OPAR CPAR OBRACE vardecl_l block + RETURN INT SCOL CBRACE #funcDef; + +vardecl_l: vardecl* #varDeclList; + +vardecl: typee id_l SCOL #varDecl; + + +id_l + : ID #idListBase + | ID COM id_l #idList + ; + +block: stat* #statList; + +stat + : assignment SCOL + | if_stat + | while_stat + | print_stat + ; + +assignment: ID ASSIGN expr #assignStat; + +if_stat: IF OPAR expr CPAR then_block=stat_block + (ELSE else_block=stat_block)? #ifStat; + +stat_block + : OBRACE block CBRACE + | stat + ; + +while_stat: WHILE OPAR expr CPAR body=stat_block #whileStat; + + +print_stat + : PRINTLN_INT OPAR expr CPAR SCOL #printlnintStat + | PRINTLN_FLOAT OPAR expr CPAR SCOL #printlnfloatStat + | PRINTLN_BOOL OPAR expr CPAR SCOL #printlnboolStat + | PRINTLN_STRING OPAR expr CPAR SCOL #printlnstringStat + ; + +expr + : MINUS expr #unaryMinusExpr + | NOT expr #notExpr + | expr myop=(MULT|DIV|MOD) expr #multiplicativeExpr + | expr myop=(PLUS|MINUS) expr #additiveExpr + | expr myop=(GT|LT|GTEQ|LTEQ) expr #relationalExpr + | expr myop=(EQ|NEQ) expr #equalityExpr + | expr AND expr #andExpr + | expr OR expr #orExpr + | atom #atomExpr + ; + +atom + : OPAR expr CPAR #parExpr + | INT #intAtom + | FLOAT #floatAtom + | (TRUE | FALSE) #booleanAtom + | ID #idAtom + | STRING #stringAtom + ; + +typee + : mytype=(INTTYPE|FLOATTYPE|BOOLTYPE|STRINGTYPE) #basicType + ; + +OR : '||'; +AND : '&&'; +EQ : '=='; +NEQ : '!='; +GT : '>'; +LT : '<'; +GTEQ : '>='; +LTEQ : '<='; +PLUS : '+'; +MINUS : '-'; +MULT : '*'; +DIV : '/'; +MOD : '%'; +NOT : '!'; + +COL: ':'; +SCOL : ';'; +COM : ','; +ASSIGN : '='; +OPAR : '('; +CPAR : ')'; +OBRACE : '{'; +CBRACE : '}'; + +TRUE : 'true'; +FALSE : 'false'; +IF : 'if'; +ELSE : 'else'; +WHILE : 'while'; +RETURN : 'return'; +PRINTLN_INT : 'println_int'; +PRINTLN_BOOL : 'println_bool'; +PRINTLN_STRING : 'println_string'; +PRINTLN_FLOAT : 'println_float'; + +INTTYPE: 'int'; +FLOATTYPE: 'float'; +STRINGTYPE: 'string'; +BOOLTYPE : 'bool'; + +ID + : [a-zA-Z_] [a-zA-Z_0-9]* + ; + +INT + : [0-9]+ + ; + +FLOAT + : [0-9]+ '.' [0-9]* + | '.' [0-9]+ + ; + +STRING + : '"' (~["\r\n] | '""')* '"' + ; + + +COMMENT +// # is a comment in Mini-C, and used for #include in real C so that we ignore #include statements + : ('#' | '//') ~[\r\n]* -> skip + ; + +SPACE + : [ \t\r\n] -> skip + ; + diff --git a/MiniC/MiniCC.py b/MiniC/MiniCC.py new file mode 100644 index 0000000..877364c --- /dev/null +++ b/MiniC/MiniCC.py @@ -0,0 +1,310 @@ +#! /usr/bin/env python3 +""" +Code generation lab, main file. Code Generation with Smart IRs. +Usage: + python3 MiniCC.py + python3 MiniCC.py --help +""" +import traceback +from typing import cast +from MiniCLexer import MiniCLexer +from MiniCParser import MiniCParser +from TP03.MiniCTypingVisitor import MiniCTypingVisitor, MiniCTypeError +from TP03.MiniCInterpretVisitor import MiniCInterpretVisitor +from Lib.Errors import (MiniCUnsupportedError, MiniCInternalError, + MiniCRuntimeError, AllocationError) + +from enum import Enum +import argparse + +from antlr4 import FileStream, CommonTokenStream +from antlr4.error.ErrorListener import ErrorListener + +import os +import sys + + +class Mode(Enum): + PARSE = 0 + EVAL = 1 + LINEAR = 2 + CFG = 3 + SSA = 4 + OPTIM = 5 + + def is_codegen(self) -> bool: + return self.value >= Mode.LINEAR.value + + +def valid_modes(): + modes = ['parse', 'typecheck', 'eval'] + + try: + import TP04.MiniCCodeGen3AVisitor # type: ignore[import] + modes.append('codegen-linear') + except ImportError: + return modes + + try: + import Lib.CFG # type: ignore[import] + modes.append('codegen-cfg') + except ImportError: + return modes + + try: + import TP05.SSA # type: ignore[import] + modes.append('codegen-ssa') + except ImportError: + return modes + + try: + import TP05c.OptimSSA # type: ignore[import] + modes.append('codegen-optim') + except ImportError: + pass + + return modes + + +class CountErrorListener(ErrorListener): + """Count number of errors. + + Parser provides getNumberOfSyntaxErrors(), but the Lexer + apparently doesn't provide an easy way to know if an error occurred + after the fact. Do the counting ourserves with a listener. + """ + + def __init__(self): + super(CountErrorListener, self).__init__() + self.count = 0 + + def syntaxError(self, recognizer, offending_symbol, line, column, msg, e): + self.count += 1 + + +def main(inputname, reg_alloc, mode, + typecheck=True, stdout=False, output_name=None, debug=False, + debug_graphs=False, ssa_graphs=False): + (basename, rest) = os.path.splitext(inputname) + if mode.is_codegen(): + if stdout: + output_name = None + print("Code will be generated on standard output") + elif output_name is None: + output_name = basename + ".s" + print("Code will be generated in file " + output_name) + + input_s = FileStream(inputname, encoding='utf-8') + lexer = MiniCLexer(input_s) + counter = CountErrorListener() + lexer._listeners.append(counter) + stream = CommonTokenStream(lexer) + parser = MiniCParser(stream) + parser._listeners.append(counter) + tree = parser.prog() + if counter.count > 0: + exit(3) # Syntax or lexicography errors occurred, don't try to go further. + if typecheck: + typing_visitor = MiniCTypingVisitor() + try: + typing_visitor.visit(tree) + except MiniCTypeError as e: + print(e.args[0]) + exit(2) + + if mode == Mode.EVAL: + # interpret Visitor + interpreter_visitor = MiniCInterpretVisitor() + try: + interpreter_visitor.visit(tree) + except MiniCRuntimeError as e: + print(e.args[0]) + exit(1) + except MiniCInternalError as e: + print(e.args[0], file=sys.stderr) + exit(4) + return + + if not mode.is_codegen(): + if debug: + print("Not running code generation because of --typecheck-only.") + return + + # Codegen 3@ CFG Visitor, first argument is debug mode + from TP04.MiniCCodeGen3AVisitor import MiniCCodeGen3AVisitor # type: ignore[import] + visitor3 = MiniCCodeGen3AVisitor(debug, parser) + + # dump generated code on stdout or file. + with open(output_name, 'w') if output_name else sys.stdout as output: + visitor3.visit(tree) + for function in visitor3.get_functions(): + fdata = function.fdata + # Allocation part + if mode == Mode.LINEAR: + code = function + else: + from TP04.BuildCFG import build_cfg # type: ignore[import] + from Lib.CFG import CFG # type: ignore[import] + code = build_cfg(function) + assert(isinstance(code, CFG)) + if debug_graphs: + s = "{}.{}.dot".format(basename, code.fdata._name) + print("CFG:", s) + code.print_dot(s, view=True) + if mode.value >= Mode.SSA.value: + from TP05.SSA import enter_ssa # type: ignore[import] + from Lib.CFG import CFG # type: ignore[import] + + DF = enter_ssa(cast(CFG, code), basename, debug, ssa_graphs) + if ssa_graphs: + s = "{}.{}.ssa.dot".format(basename, code.fdata._name) + print("SSA:", s) + code.print_dot(s, DF, True) + if mode == Mode.OPTIM: + from TP05c.OptimSSA import OptimSSA # type: ignore[import] + OptimSSA(cast(CFG, code), debug=debug) + if ssa_graphs: + s = "{}.{}.optimssa.dot".format(basename, code.fdata._name) + print("SSA after optim:", s) + code.print_dot(s, view=True) + allocator = None + if reg_alloc == "naive": + from Lib.Allocator import NaiveAllocator # type: ignore[import] + allocator = NaiveAllocator(fdata) + comment = "naive allocation" + elif reg_alloc == "all-in-mem": + from TP04.AllInMemAllocator import AllInMemAllocator # type: ignore[import] + allocator = AllInMemAllocator(fdata) + comment = "all-in-memory allocation" + elif reg_alloc == "smart": + liveness = None + if mode == Mode.SSA: + from TP05.LivenessSSA import LivenessSSA # type: ignore[import] + try: + from Lib.CFG import CFG # type: ignore[import] + liveness = LivenessSSA(cast(CFG, code), debug=debug) + except NameError: + form = "CFG in SSA form" + raise ValueError("Invalid dataflow form: \ +liveness file not found for {}.".format(form)) + else: + try: + from TP05.LivenessDataFlow import LivenessDataFlow # type: ignore[import] + liveness = LivenessDataFlow(code, debug=debug) + except NameError: + form = "CFG not in SSA form" + raise ValueError("Invalid dataflow form: \ +liveness file not found for {}.".format(form)) + from TP05.SmartAllocator import SmartAllocator # type: ignore[import] + allocator = SmartAllocator(fdata, basename, liveness, + debug, debug_graphs) + comment = "smart allocation with graph coloring" + elif reg_alloc == "none": + comment = "non executable 3-Address instructions" + else: + raise ValueError("Invalid allocation strategy:" + reg_alloc) + if allocator: + allocator.prepare() + if mode == Mode.SSA: + from Lib.CFG import CFG # type: ignore[import] + from TP05.SSA import exit_ssa # type: ignore[import] + exit_ssa(cast(CFG, code)) + comment += " with SSA" + if allocator: + allocator.rewriteCode(code) + if mode == Mode.SSA and ssa_graphs: + s = "{}.{}.exitssa.dot".format(basename, code.fdata._name) + print("CFG after SSA:", s) + code.print_dot(s, view=True) + code.print_code(output, comment=comment) + if debug: + visitor3.printSymbolTable() + + +# command line management +if __name__ == '__main__': + + modes = valid_modes() + + parser = argparse.ArgumentParser(description='Generate code for .c file') + + parser.add_argument('filename', type=str, + help='Source file.') + parser.add_argument('--mode', type=str, + choices=valid_modes(), + required=True, + help='Operation to perform on the input program') + parser.add_argument('--debug', action='store_true', + default=False, + help='Emit verbose debug output') + parser.add_argument('--disable-typecheck', action='store_true', + default=False, + help="Don't run the typechecker before evaluation or code generation") + + if "codegen-linear" in modes: + parser.add_argument('--reg-alloc', type=str, + choices=['none', 'naive', 'all-in-mem', 'smart'], + help='Register allocation to perform during code generation') + parser.add_argument('--stdout', action='store_true', + help='Generate code to stdout') + parser.add_argument('--output', type=str, + help='Generate code to outfile') + + if "codegen-cfg" in modes: + parser.add_argument('--graphs', action='store_true', + default=False, + help='Display graphs (CFG, conflict graph).') + + if "codegen-ssa" in modes: + parser.add_argument('--ssa-graphs', action='store_true', + default=False, + help='Display SSA graphs (DT, DF).') + + args = parser.parse_args() + reg_alloc = args.reg_alloc if "codegen-linear" in modes else None + to_stdout = args.stdout if "codegen-linear" in modes else False + outfile = args.output if "codegen-linear" in modes else None + graphs = args.graphs if "codegen-cfg" in modes else False + ssa_graphs = args.ssa_graphs if "codegen-ssa" in modes else False + + if reg_alloc is None and "codegen" in args.mode: + print("error: the following arguments is required: --reg-alloc") + exit(1) + elif reg_alloc is not None and "codegen" not in args.mode: + print("error: register allocation is only available in code generation mode") + exit(1) + + typecheck = not args.disable_typecheck + + if args.mode == "parse": + mode = Mode.PARSE + typecheck = False + elif args.mode == "typecheck": + mode = Mode.PARSE + elif args.mode == "eval": + mode = Mode.EVAL + elif args.mode == "codegen-linear": + mode = Mode.LINEAR + if reg_alloc == "smart": + print("error: smart register allocation is not compatible with linear code generation") + exit(1) + elif args.mode == "codegen-cfg": + mode = Mode.CFG + elif args.mode == "codegen-ssa": + mode = Mode.SSA + elif args.mode == "codegen-optim": + mode = Mode.OPTIM + else: + raise ValueError("Invalid mode:" + args.mode) + + try: + main(args.filename, reg_alloc, mode, + typecheck, + to_stdout, outfile, args.debug, + graphs, ssa_graphs) + except MiniCUnsupportedError as e: + print(e) + exit(5) + except (MiniCInternalError, AllocationError): + traceback.print_exc() + exit(4) diff --git a/MiniC/README-interpreter.md b/MiniC/README-interpreter.md new file mode 100644 index 0000000..cf39f47 --- /dev/null +++ b/MiniC/README-interpreter.md @@ -0,0 +1,32 @@ +# MiniC interpreter and typer +LAB3, MIF08 / CAP 2022-23 + + +# Authors + +TODO: YOUR NAME HERE + +# Contents + +TODO for STUDENTS : Say a bit about the code infrastructure ... + +# Howto + +`make test-interpret TEST_FILES='TP03/tests/provided/examples/test_print_int.c'` for a single run + +`make test` to test all the files in `*/tests/*` according to `EXPECTED` results. + +You can select the files you want to test by using `make test TEST_FILES='TP03/**/*bad*.c'` (`**` means +"any number of possibly nested directories"). + +# Test design + +TODO: explain your tests. Do not repeat what test files already contain, just give the main objectives of the tests. + +# Design choices + +TODO: explain your choices - explain the limitations of your implementation. + +# Known bugs + +TODO: document any known bug and limitations. Did you do everything asked for? Did you implement an extension? diff --git a/MiniC/TP03/MiniCInterpretVisitor.py b/MiniC/TP03/MiniCInterpretVisitor.py new file mode 100644 index 0000000..49d10c3 --- /dev/null +++ b/MiniC/TP03/MiniCInterpretVisitor.py @@ -0,0 +1,178 @@ +# Visitor to *interpret* MiniC files +from typing import Dict, List, cast +from MiniCVisitor import MiniCVisitor +from MiniCParser import MiniCParser +from Lib.Errors import MiniCRuntimeError, MiniCInternalError + +MINIC_VALUE = int | str | bool | float | List['MINIC_VALUE'] + + +class MiniCInterpretVisitor(MiniCVisitor): + + _memory: Dict[str, MINIC_VALUE] + + def __init__(self): + self._memory = dict() # store all variable ids and values. + self.has_main = False + + # visitors for variable declarations + + def visitVarDecl(self, ctx) -> None: + # Initialise all variables in self._memory + type_str = ctx.typee().getText() + raise NotImplementedError() + + def visitIdList(self, ctx) -> List[str]: + raise NotImplementedError() + + def visitIdListBase(self, ctx) -> List[str]: + return [ctx.ID().getText()] + + # visitors for atoms --> value + + def visitParExpr(self, ctx) -> MINIC_VALUE: + return self.visit(ctx.expr()) + + def visitIntAtom(self, ctx) -> int: + return int(ctx.getText()) + + def visitFloatAtom(self, ctx) -> float: + return float(ctx.getText()) + + def visitBooleanAtom(self, ctx) -> bool: + return ctx.getText() == "true" + + def visitIdAtom(self, ctx) -> MINIC_VALUE: + raise NotImplementedError() + + def visitStringAtom(self, ctx) -> str: + return ctx.getText()[1:-1] # Remove the "" + + # visit expressions + + def visitAtomExpr(self, ctx) -> MINIC_VALUE: + return self.visit(ctx.atom()) + + def visitOrExpr(self, ctx) -> bool: + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + return lval | rval + + def visitAndExpr(self, ctx) -> bool: + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + return lval & rval + + def visitEqualityExpr(self, ctx) -> bool: + assert ctx.myop is not None + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + # be careful for float equality + if ctx.myop.type == MiniCParser.EQ: + return lval == rval + else: + return lval != rval + + def visitRelationalExpr(self, ctx) -> bool: + assert ctx.myop is not None + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + if ctx.myop.type == MiniCParser.LT: + return lval < rval + elif ctx.myop.type == MiniCParser.LTEQ: + return lval <= rval + elif ctx.myop.type == MiniCParser.GT: + return lval > rval + elif ctx.myop.type == MiniCParser.GTEQ: + return lval >= rval + else: + raise MiniCInternalError( + "Unknown comparison operator '%s'" % ctx.myop + ) + + def visitAdditiveExpr(self, ctx) -> MINIC_VALUE: + assert ctx.myop is not None + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + if ctx.myop.type == MiniCParser.PLUS: + if any(isinstance(x, str) for x in (lval, rval)): + return '{}{}'.format(lval, rval) + else: + return lval + rval + elif ctx.myop.type == MiniCParser.MINUS: + return lval - rval + else: + raise MiniCInternalError( + "Unknown additive operator '%s'" % ctx.myop) + + def visitMultiplicativeExpr(self, ctx) -> MINIC_VALUE: + assert ctx.myop is not None + lval = self.visit(ctx.expr(0)) + rval = self.visit(ctx.expr(1)) + if ctx.myop.type == MiniCParser.MULT: + return lval * rval + elif ctx.myop.type == MiniCParser.DIV: + if rval == 0: + raise MiniCRuntimeError("Division by 0") + if isinstance(lval, int): + return lval // rval + else: + return lval / rval + elif ctx.myop.type == MiniCParser.MOD: + # TODO : interpret modulo + raise NotImplementedError() + else: + raise MiniCInternalError( + "Unknown multiplicative operator '%s'" % ctx.myop) + + def visitNotExpr(self, ctx) -> bool: + return not self.visit(ctx.expr()) + + def visitUnaryMinusExpr(self, ctx) -> MINIC_VALUE: + return -self.visit(ctx.expr()) + + # visit statements + + def visitPrintlnintStat(self, ctx) -> None: + val = self.visit(ctx.expr()) + print(val) + + def visitPrintlnfloatStat(self, ctx) -> None: + val = self.visit(ctx.expr()) + if isinstance(val, float): + val = "%.2f" % val + print(val) + + def visitPrintlnboolStat(self, ctx) -> None: + val = self.visit(ctx.expr()) + print('1' if val else '0') + + def visitPrintlnstringStat(self, ctx) -> None: + val = self.visit(ctx.expr()) + print(val) + + def visitAssignStat(self, ctx) -> None: + raise NotImplementedError() + + def visitIfStat(self, ctx) -> None: + raise NotImplementedError() + + def visitWhileStat(self, ctx) -> None: + raise NotImplementedError() + + # TOPLEVEL + def visitProgRule(self, ctx) -> None: + self.visitChildren(ctx) + if not self.has_main: + # A program without a main function is compilable (hence + # it's not a typing error per se), but not executable, + # hence we consider it a runtime error. + raise MiniCRuntimeError("No main function in file") + + # Visit a function: ignore if non main! + def visitFuncDef(self, ctx) -> None: + funname = ctx.ID().getText() + if funname == "main": + self.has_main = True + self.visit(ctx.vardecl_l()) + self.visit(ctx.block()) diff --git a/MiniC/TP03/MiniCTypingVisitor.py b/MiniC/TP03/MiniCTypingVisitor.py new file mode 100644 index 0000000..f9b29f5 --- /dev/null +++ b/MiniC/TP03/MiniCTypingVisitor.py @@ -0,0 +1,147 @@ +# Visitor to *typecheck* MiniC files +from typing import List +from MiniCVisitor import MiniCVisitor +from MiniCParser import MiniCParser +from Lib.Errors import MiniCInternalError, MiniCTypeError + +from enum import Enum + + +class BaseType(Enum): + Float, Integer, Boolean, String = range(4) + + +# Basic Type Checking for MiniC programs. +class MiniCTypingVisitor(MiniCVisitor): + + def __init__(self): + self._memorytypes = dict() # id -> types + # For now, we don't have real functions ... + self._current_function = "main" + + def _raise(self, ctx, for_what, *types): + raise MiniCTypeError( + 'In function {}: Line {} col {}: invalid type for {}: {}'.format( + self._current_function, + ctx.start.line, ctx.start.column, for_what, + ' and '.join(t.name.lower() for t in types))) + + def _assertSameType(self, ctx, for_what, *types): + if not all(types[0] == t for t in types): + raise MiniCTypeError( + 'In function {}: Line {} col {}: type mismatch for {}: {}'.format( + self._current_function, + ctx.start.line, ctx.start.column, for_what, + ' and '.join(t.name.lower() for t in types))) + + def _raiseNonType(self, ctx, message): + raise MiniCTypeError( + 'In function {}: Line {} col {}: {}'.format( + self._current_function, + ctx.start.line, ctx.start.column, message)) + + # type declaration + + def visitVarDecl(self, ctx) -> None: + raise NotImplementedError() + + def visitBasicType(self, ctx): + assert ctx.mytype is not None + if ctx.mytype.type == MiniCParser.INTTYPE: + return BaseType.Integer + elif ctx.mytype.type == MiniCParser.FLOATTYPE: + return BaseType.Float + else: # TODO: same for other types + raise NotImplementedError() + + def visitIdList(self, ctx) -> List[str]: + raise NotImplementedError() + + def visitIdListBase(self, ctx) -> List[str]: + raise NotImplementedError() + + # typing visitors for expressions, statements ! + + # visitors for atoms --> type + def visitParExpr(self, ctx): + return self.visit(ctx.expr()) + + def visitIntAtom(self, ctx): + return BaseType.Integer + + def visitFloatAtom(self, ctx): + return BaseType.Float + + def visitBooleanAtom(self, ctx): + raise NotImplementedError() + + def visitIdAtom(self, ctx): + try: + return self._memorytypes[ctx.getText()] + except KeyError: + self._raiseNonType(ctx, + "Undefined variable {}".format(ctx.getText())) + + def visitStringAtom(self, ctx): + return BaseType.String + + # now visit expr + + def visitAtomExpr(self, ctx): + return self.visit(ctx.atom()) + + def visitOrExpr(self, ctx): + raise NotImplementedError() + + def visitAndExpr(self, ctx): + raise NotImplementedError() + + def visitEqualityExpr(self, ctx): + raise NotImplementedError() + + def visitRelationalExpr(self, ctx): + raise NotImplementedError() + + def visitAdditiveExpr(self, ctx): + assert ctx.myop is not None + raise NotImplementedError() + + def visitMultiplicativeExpr(self, ctx): + raise NotImplementedError() + + def visitNotExpr(self, ctx): + raise NotImplementedError() + + def visitUnaryMinusExpr(self, ctx): + raise NotImplementedError() + + # visit statements + + def visitPrintlnintStat(self, ctx): + etype = self.visit(ctx.expr()) + if etype != BaseType.Integer: + self._raise(ctx, 'println_int statement', etype) + + def visitPrintlnfloatStat(self, ctx): + etype = self.visit(ctx.expr()) + if etype != BaseType.Float: + self._raise(ctx, 'println_float statement', etype) + + def visitPrintlnboolStat(self, ctx): + etype = self.visit(ctx.expr()) + if etype != BaseType.Boolean: + self._raise(ctx, 'println_int statement', etype) + + def visitPrintlnstringStat(self, ctx): + etype = self.visit(ctx.expr()) + if etype != BaseType.String: + self._raise(ctx, 'println_string statement', etype) + + def visitAssignStat(self, ctx): + raise NotImplementedError() + + def visitWhileStat(self, ctx): + raise NotImplementedError() + + def visitIfStat(self, ctx): + raise NotImplementedError() diff --git a/MiniC/TP03/tests/provided/examples-types/bad_def01.c b/MiniC/TP03/tests/provided/examples-types/bad_def01.c new file mode 100644 index 0000000..366bc74 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_def01.c @@ -0,0 +1,13 @@ +#include "printlib.h" + +int main(){ + int n; + n=17; + m=n+3; + println_int(m); + return 0; +} + +// EXPECTED +// EXITCODE 2 +// In function main: Line 6 col 2: Undefined variable m diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type00.c b/MiniC/TP03/tests/provided/examples-types/bad_type00.c new file mode 100644 index 0000000..9d3580e --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type00.c @@ -0,0 +1,10 @@ +#include "printlib.h" + +int main(){ + int x; + x="blablabla"; + return 0; +} +// EXITCODE 2 +// EXPECTED +// In function main: Line 5 col 2: type mismatch for x: integer and string diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type01.c b/MiniC/TP03/tests/provided/examples-types/bad_type01.c new file mode 100644 index 0000000..1a84239 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type01.c @@ -0,0 +1,14 @@ +#include "printlib.h" + +int main(){ + int n; + string s; + n=17; + s="seventeen"; + s = n*s; + return 0; +} + +// EXITCODE 2 +// EXPECTED +// In function main: Line 8 col 6: invalid type for multiplicative operands: integer and string diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type02.c b/MiniC/TP03/tests/provided/examples-types/bad_type02.c new file mode 100644 index 0000000..1a9796e --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type02.c @@ -0,0 +1,11 @@ +#include "printlib.h" + +int main(){ + string x; + x=1; + return 0; +} + +// EXITCODE 2 +// EXPECTED +// In function main: Line 5 col 2: type mismatch for x: string and integer diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type03.c b/MiniC/TP03/tests/provided/examples-types/bad_type03.c new file mode 100644 index 0000000..1dd7199 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type03.c @@ -0,0 +1,10 @@ +#include "printlib.h" + +int main(){ + int x; + x=34+f; + return 0; +} +// EXITCODE 2 +// EXPECTED +// In function main: Line 5 col 7: Undefined variable f diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type04.c b/MiniC/TP03/tests/provided/examples-types/bad_type04.c new file mode 100644 index 0000000..7f71583 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type04.c @@ -0,0 +1,11 @@ +#include "printlib.h" + +int main(){ + println_int("foo"); + return 0; +} + +// EXITCODE 2 +// EXPECTED +// In function main: Line 4 col 2: invalid type for println_int statement: string + diff --git a/MiniC/TP03/tests/provided/examples-types/bad_type_bool_bool.c b/MiniC/TP03/tests/provided/examples-types/bad_type_bool_bool.c new file mode 100644 index 0000000..be2d14e --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/bad_type_bool_bool.c @@ -0,0 +1,9 @@ +#include "printlib.h" + +int main(){ + println_int(true+true); + return 0; +} +// EXITCODE 2 +// EXPECTED +// In function main: Line 4 col 14: invalid type for additive operands: boolean and boolean diff --git a/MiniC/TP03/tests/provided/examples-types/double_decl00.c b/MiniC/TP03/tests/provided/examples-types/double_decl00.c new file mode 100644 index 0000000..5a4bbbd --- /dev/null +++ b/MiniC/TP03/tests/provided/examples-types/double_decl00.c @@ -0,0 +1,12 @@ +#include "printlib.h" + +int main(){ + int x,y; + int z,x; + x=42; + return 0; +} + +// EXITCODE 2 +// EXPECTED +// In function main: Line 5 col 2: Variable x already declared diff --git a/MiniC/TP03/tests/provided/examples/bad_main.c b/MiniC/TP03/tests/provided/examples/bad_main.c new file mode 100644 index 0000000..a48a988 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/bad_main.c @@ -0,0 +1,11 @@ +#include "printlib.h" + +int toto(){ + println_int(42); + return 0; +} + +// EXITCODE 1 +// EXPECTED +// No main function in file + diff --git a/MiniC/TP03/tests/provided/examples/test_assign.c b/MiniC/TP03/tests/provided/examples/test_assign.c new file mode 100644 index 0000000..c7b4bee --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_assign.c @@ -0,0 +1,13 @@ +#include "printlib.h" + +int main() +{ + int n,u; + n=17; + u=n; + println_int(n); + return 0; +} + +// EXPECTED +// 17 diff --git a/MiniC/TP03/tests/provided/examples/test_compare.c b/MiniC/TP03/tests/provided/examples/test_compare.c new file mode 100644 index 0000000..d5f9481 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_compare.c @@ -0,0 +1,47 @@ +#include "printlib.h" + +int main() +{ + if (2 < 3) + { + println_int(1); + } + if (2 > 3) + { + println_int(2); + } + if (2 <= 2) + { + println_int(3); + } + if (2 >= 2) + { + println_int(4); + } + + if (2 == 3) + { + println_int(10); + } + if (2 != 3) + { + println_int(20); + } + if (2 == 2) + { + println_int(30); + } + if (2 != 2) + { + println_int(40); + } + + return 0; +} + +// EXPECTED +// 1 +// 3 +// 4 +// 20 +// 30 diff --git a/MiniC/TP03/tests/provided/examples/test_expr.c b/MiniC/TP03/tests/provided/examples/test_expr.c new file mode 100644 index 0000000..faed46f --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_expr.c @@ -0,0 +1,11 @@ +#include "printlib.h" + +int main() { + if ((1.0 + 2.0) * 3.0 == 9.0) { + println_string("OK"); + } + return 0; +} + +// EXPECTED +// OK diff --git a/MiniC/TP03/tests/provided/examples/test_print.c b/MiniC/TP03/tests/provided/examples/test_print.c new file mode 100644 index 0000000..4ad499b --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_print.c @@ -0,0 +1,15 @@ +#include "printlib.h" + +int main(){ + println_int(3/2+45*(2/1)); + println_int(23+19); + println_bool( (false || 3 != 77 ) && (42<=1515) ); + println_string("coucou"); + return 0; +} + +// EXPECTED +// 91 +// 42 +// 1 +// coucou diff --git a/MiniC/TP03/tests/provided/examples/test_print_int.c b/MiniC/TP03/tests/provided/examples/test_print_int.c new file mode 100644 index 0000000..21015d6 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_print_int.c @@ -0,0 +1,9 @@ +#include "printlib.h" + +int main(){ + println_int(42); + return 0; +} + +// EXPECTED +// 42 diff --git a/MiniC/TP03/tests/provided/examples/test_str_assign.c b/MiniC/TP03/tests/provided/examples/test_str_assign.c new file mode 100644 index 0000000..d0eda85 --- /dev/null +++ b/MiniC/TP03/tests/provided/examples/test_str_assign.c @@ -0,0 +1,11 @@ +#include "printlib.h" + +int main(){ + int x; + x="blabla"; + return 0; +} + +// EXPECTED +// In function main: Line 5 col 2: type mismatch for x: integer and string +// EXITCODE 2 diff --git a/MiniC/TP03/tests/provided/strcat/test_string01.c b/MiniC/TP03/tests/provided/strcat/test_string01.c new file mode 100644 index 0000000..5f5e1fd --- /dev/null +++ b/MiniC/TP03/tests/provided/strcat/test_string01.c @@ -0,0 +1,14 @@ +#include "printlib.h" + +int main(){ + string x,y,z; + x = "ENS"; + y = "De Lyon"; + z = x + " " + y; + println_string(z); + return 0; +} + +// EXPECTED +// ENS De Lyon + diff --git a/MiniC/TP03/tests/provided/strcat/test_string02.c b/MiniC/TP03/tests/provided/strcat/test_string02.c new file mode 100644 index 0000000..a90884a --- /dev/null +++ b/MiniC/TP03/tests/provided/strcat/test_string02.c @@ -0,0 +1,16 @@ +#include "printlib.h" + +int main(){ + string n,m; + n = "foo"; + m = "bar"; + println_string(n); + println_string(m); + println_string(n + m); + return 0; +} + +// EXPECTED +// foo +// bar +// foobar diff --git a/MiniC/TP03/tests/provided/strcat/unititialized_str.c b/MiniC/TP03/tests/provided/strcat/unititialized_str.c new file mode 100644 index 0000000..beae5d5 --- /dev/null +++ b/MiniC/TP03/tests/provided/strcat/unititialized_str.c @@ -0,0 +1,13 @@ +#include "printlib.h" + +int main() { + string s; + println_string(s); + s = s + "Coucou"; + println_string(s); + return 0; +} + +// EXPECTED +// +// Coucou \ No newline at end of file diff --git a/MiniC/TP03/tests/provided/uninitialised/bool.c b/MiniC/TP03/tests/provided/uninitialised/bool.c new file mode 100644 index 0000000..b7c2168 --- /dev/null +++ b/MiniC/TP03/tests/provided/uninitialised/bool.c @@ -0,0 +1,16 @@ +#include "printlib.h" + +int main() { + bool x; + if (x) { + println_int(1); + } + x = !x; + if (x) { + println_int(2); + } + return 0; +} + +// EXPECTED +// 2 diff --git a/MiniC/TP03/tests/provided/uninitialised/float.c b/MiniC/TP03/tests/provided/uninitialised/float.c new file mode 100644 index 0000000..df033a3 --- /dev/null +++ b/MiniC/TP03/tests/provided/uninitialised/float.c @@ -0,0 +1,13 @@ +#include "printlib.h" + +int main() { + float x; + println_float(x); + x = x + 1.0; + println_float(x); + return 0; +} + +// EXPECTED +// 0.00 +// 1.00 \ No newline at end of file diff --git a/MiniC/TP03/tests/provided/uninitialised/int.c b/MiniC/TP03/tests/provided/uninitialised/int.c new file mode 100644 index 0000000..b3afe0c --- /dev/null +++ b/MiniC/TP03/tests/provided/uninitialised/int.c @@ -0,0 +1,13 @@ +#include "printlib.h" + +int main() { + int x; + println_int(x); + x = x + 1; + println_int(x); + return 0; +} + +// EXPECTED +// 0 +// 1 \ No newline at end of file diff --git a/MiniC/TP03/tests/students/README.md b/MiniC/TP03/tests/students/README.md new file mode 100644 index 0000000..f7c87d9 --- /dev/null +++ b/MiniC/TP03/tests/students/README.md @@ -0,0 +1 @@ +Add your own tests in this directory. \ No newline at end of file diff --git a/MiniC/printlib.h b/MiniC/printlib.h new file mode 100644 index 0000000..99d031c --- /dev/null +++ b/MiniC/printlib.h @@ -0,0 +1,20 @@ +/** + * Compatibility layer with C (meant to be #included in MiniC source + * files). Defines types, constants and functions that are built-in + * MiniC, to allow compiling MiniC programs with GCC. + */ + +typedef char * string; +typedef int bool; +static const int true = 1; +static const int false = 0; + +void print_int(int); +void println_int(int); +void println_bool(int); + +void print_float(float); +void println_float(float); + +void print_string(string); +void println_string(string); diff --git a/MiniC/pyproject.toml b/MiniC/pyproject.toml new file mode 100644 index 0000000..21ba6a3 --- /dev/null +++ b/MiniC/pyproject.toml @@ -0,0 +1,2 @@ +[tool.pyright] +ignore = ["replace_cfgssa.py", "replace_smart_alloc.py", "replace_target_api.py", "test_replace_mem.py", "MiniCCWrapper.py", "MiniCCWrapperCFGSSA.py", "MiniCCWrapperSmartAlloc.py", "MiniCCWrapperFunctions.py", "MiniCLexer.py", "MiniCParser.py", "MiniCVisitor.py", "*.diff.py", "**/*.diff.py"] diff --git a/MiniC/test_expect_pragma.py b/MiniC/test_expect_pragma.py new file mode 100644 index 0000000..4480971 --- /dev/null +++ b/MiniC/test_expect_pragma.py @@ -0,0 +1,191 @@ +import collections +import re +import os +import subprocess +import sys +import pytest + +testinfo = collections.namedtuple( + 'testinfo', + ['exitcode', 'execcode', 'output', 'linkargs', 'skip_test_expected']) +default_testinfo = testinfo( + exitcode=0, execcode=0, output='', linkargs=[], skip_test_expected=False) + + +def cat(filename): + with open(filename, "rb") as f: + for line in f: + sys.stdout.buffer.write(line) + + +def env_bool_variable(name, globals): + if name not in globals: + globals[name] = False + if name in os.environ: + globals[name] = True + + +def env_str_variable(name, globals): + if name in os.environ: + globals[name] = os.environ[name] + + +class TestExpectPragmas(object): + """Base class for tests that read the expected result as annotations + in test files. + + get_expect(file) will parse the file, looking EXPECT and EXITCODE + pragmas. + + run_command(command) is a wrapper around subprocess.check_output() + that extracts the output and exit code. + + """ + + def get_expect(self, filename): + """Parse "filename" looking for EXPECT and EXITCODE annotations. + + Look for a line "EXPECTED" (possibly with whitespaces and + comments). Text after this "EXPECTED" line is the expected + output. + + The file may also contain a line like "EXITCODE " where + is an integer, and is the expected exitcode of the command. + + The result is cached to avoid re-parsing the file multiple + times. + """ + if filename not in self.__expect: + self.__expect[filename] = self._extract_expect(filename) + return self.__expect[filename] + + def remove(self, file): + """Like os.remove(), but ignore errors, e.g. don't complain if the + file doesn't exist. + """ + try: + os.remove(file) + except OSError: + pass + + def run_command(self, cmd, scope="compile"): + """Run the command cmd (given as [command, arg1, arg2, ...]), and + return testinfo(exitcode=..., output=...) containing the + exit code of the command it its standard output + standard error. + + If scope="compile" (resp. "runtime"), then the exitcode (resp. + execcode) is set with the exit status of the command, and the + execcode (resp. exitcode) is set to 0. + """ + try: + output = subprocess.check_output(cmd, timeout=60, + stderr=subprocess.STDOUT) + status = 0 + except subprocess.CalledProcessError as e: + output = e.output + status = e.returncode + if scope == "runtime": + return default_testinfo._replace(execcode=status, + output=output.decode()) + else: + return default_testinfo._replace(exitcode=status, + output=output.decode()) + + def skip_if_partial_match(self, actual, expect, ignore_error_message): + if not ignore_error_message: + return False + + # TODO: Deal with undefined behavior here? + + if expect.exitcode != actual.exitcode: + # Not the same exit code => something's wrong anyway + return False + + if actual.exitcode == 3: + # There's a syntax error in both expected and actual, + # but the actual error may slightly differ if we don't + # have the exact same .g4. + return True + + # Let the test pass with 'return True' if appropriate. + # Otherwise, continue to the full assertion for a + # complete diagnostic. + if actual.exitcode != 0 and expect.exitcode == actual.exitcode: + if expect.output == '': + # No output expected, but we know there must be an + # error. If there was a particular error message + # expected, we'd have written it in the output, + # hence just ignore the actual message. + return True + # Ignore difference in error message except in the + # line number (ignore the column too, it may + # slightly vary, eg. in "foo" / 4, the error may + # be considered on "foo" or on /): + if re.match(r'^In function [^ :]*: Line [0-9]* col [0-9]*:', actual.output): + out_loc = re.sub(r' col [0-9]*:.*$', '', actual.output) + exp_loc = re.sub(r' col [0-9]*:.*$', '', expect.output) + if out_loc == exp_loc: + return True + if any(x.output and (x.output.endswith('has no value yet!' + os.linesep) + or x.output.endswith(' by 0' + os.linesep)) + for x in (actual, expect)): + # Ignore the error message when our compiler + # raises this error (either in actual or expect, + # depending on what we're testing). + return True + + return False + + __expect = {} + + def _extract_expect(self, file): + exitcode = 0 + execcode = 0 + linkargs = [] + inside_expected = False + skip_test_expected = False + expected_lines = [] + expected_present = False + with open(file, encoding="utf-8") as f: + for line in f.readlines(): + # Ignore non-comments + if not re.match(r'\s*//', line): + continue + # Cleanup comment start and whitespaces + line = re.sub(r'\s*//\s*', '', line) + line = re.sub(r'\s*$', '', line) + + if line == 'END EXPECTED': + inside_expected = False + elif line.startswith('EXITCODE'): + words = line.split(' ') + assert len(words) == 2 + exitcode = int(words[1]) + elif line.startswith('EXECCODE'): + words = line.split(' ') + assert len(words) == 2 + execcode = int(words[1]) + elif line.startswith('LINKARGS'): + words = line.split(' ') + assert len(words) >= 2 + linkargs += [w.replace("$dir", os.path.dirname(file)) + for w in words[1:]] + elif line == 'EXPECTED': + inside_expected = True + expected_present = True + elif line == 'SKIP TEST EXPECTED': + skip_test_expected = True + elif inside_expected: + expected_lines.append(line) + + if not expected_present: + pytest.fail("Missing EXPECTED directive in test file") + + if expected_lines == []: + output = '' + else: + output = os.linesep.join(expected_lines) + os.linesep + + return testinfo(exitcode=exitcode, execcode=execcode, + output=output, linkargs=linkargs, + skip_test_expected=skip_test_expected) diff --git a/MiniC/test_interpreter.py b/MiniC/test_interpreter.py new file mode 100644 index 0000000..bfee619 --- /dev/null +++ b/MiniC/test_interpreter.py @@ -0,0 +1,57 @@ +#! /usr/bin/env python3 +import pytest +import glob +import os +import sys +from test_expect_pragma import TestExpectPragmas, cat + +HERE = os.path.dirname(os.path.realpath(__file__)) +if HERE == os.path.realpath('.'): + HERE = '.' +TEST_DIR = HERE +IMPLEM_DIR = HERE + + +DISABLE_TYPECHECK = False # True to skip typechecking + +ALL_FILES = [] +# tests for typing AND evaluation +ALL_FILES += glob.glob(os.path.join(TEST_DIR, 'TP03/tests/provided/**/*.c'), recursive=True) +ALL_FILES += glob.glob(os.path.join(TEST_DIR, 'TP03/tests/students/**/*.c'), recursive=True) + + +# Path setting +if 'TEST_FILES' in os.environ: + ALL_FILES = glob.glob(os.environ['TEST_FILES'], recursive=True) +MINIC_EVAL = os.path.join(IMPLEM_DIR, 'MiniCC.py') + + +class TestInterpret(TestExpectPragmas): + + def evaluate(self, file): + if not DISABLE_TYPECHECK: + return self.run_command([sys.executable, MINIC_EVAL, "--mode", "eval", file]) + else: + return self.run_command([sys.executable, MINIC_EVAL, "--mode", "eval", "--disable-typecheck", file]) + + # Not in test_expect_pragma to get assertion rewritting + def assert_equal(self, actual, expected): + if expected.output is not None and actual.output is not None: + assert actual.output == expected.output, \ + "Output of the program is incorrect." + assert actual.exitcode == expected.exitcode, \ + "Exit code of the compiler is incorrect" + assert actual.execcode == expected.execcode, \ + "Exit code of the execution is incorrect" + + @pytest.mark.parametrize('filename', ALL_FILES) + def test_eval(self, filename): + cat(filename) # For diagnosis + expect = self.get_expect(filename) + eval = self.evaluate(filename) + if expect: + self.assert_equal(eval, expect) + + +if __name__ == '__main__': + pytest.main(sys.argv) diff --git a/PLANNING.md b/PLANNING.md index 6fb0175..72ed4aa 100644 --- a/PLANNING.md +++ b/PLANNING.md @@ -43,4 +43,12 @@ _Academic first semester 2022-2023_ - :book: 4th Course session: Friday 23/09/2022, 10:15. Amphi B (Ludovic Henrio) - * Typing [slides in english](course/CAP_cours04_typing.pdf). \ No newline at end of file + * Typing [slides in english](course/CAP_cours04_typing.pdf). + +# Week 4: + +- :hammer: Lab 3: Wednesday 28/09/2021, 10h15-12h15. Rooms A1 (Nicolas Chappe) & B2 (Rémi Di Guardia) + + * Interpreter & Typer [TP03](TP03/tp3.pdf). + * Code in [TP03/](TP03/) and [MiniC/TP03/](MiniC/TP03/). + * Graded lab due on https://etudes.ens-lyon.fr/course/view.php?id=5249 before 2022-10-04 23:59 diff --git a/TP03/arith-visitor/.gitignore b/TP03/arith-visitor/.gitignore new file mode 100644 index 0000000..cfd98dc --- /dev/null +++ b/TP03/arith-visitor/.gitignore @@ -0,0 +1,2 @@ +/AritListener.py +/AritVisitor.py diff --git a/TP03/arith-visitor/Arit.g4 b/TP03/arith-visitor/Arit.g4 new file mode 100644 index 0000000..47c322b --- /dev/null +++ b/TP03/arith-visitor/Arit.g4 @@ -0,0 +1,33 @@ +grammar Arit; + +prog: statement+ EOF #statementList + ; + +statement + : expr SCOL #exprInstr + | 'set' ID '=' expr SCOL #assignInstr + ; + +expr: expr multop=(MULT | DIV) expr #multiplicationExpr + | expr addop=(PLUS | MINUS) expr #additiveExpr + | atom #atomExpr + ; + +atom: INT #numberAtom + | ID #idAtom + | '(' expr ')' #parens + ; + + +SCOL : ';'; +PLUS : '+'; +MINUS : '-'; +MULT : '*'; +DIV : '/'; +ID: [a-zA-Z_] [a-zA-Z_0-9]*; + +INT: [0-9]+; + +COMMENT: '#' ~[\r\n]* -> skip; +NEWLINE: '\r'? '\n' -> skip; +WS : (' '|'\t')+ -> skip; diff --git a/TP03/arith-visitor/Makefile b/TP03/arith-visitor/Makefile new file mode 100644 index 0000000..78daa82 --- /dev/null +++ b/TP03/arith-visitor/Makefile @@ -0,0 +1,23 @@ +PACKAGE = Arit +MAINFILE = arit + +ifndef ANTLR4 +abort: + $(error variable ANTLR4 is not set) +endif + +all: $(PACKAGE).g4 + $(ANTLR4) $^ -Dlanguage=Python3 -visitor + +run: $(MAINFILE).py + python3 $^ + +ex: $(MAINFILE).py + python3 $^ < myexample + +test: all + python3 ./test_arith_visitor.py + +clean: + find . \( -iname "~" -or -iname "*.cache*" -or -iname "*.diff" -or -iname "log.txt" -or -iname "*.pyc" -or -iname "*.tokens" -or -iname "*.interp" \) -exec rm -rf '{}' \; + rm -rf $(PACKAGE)*.py diff --git a/TP03/arith-visitor/MyAritVisitor.py b/TP03/arith-visitor/MyAritVisitor.py new file mode 100644 index 0000000..10b4590 --- /dev/null +++ b/TP03/arith-visitor/MyAritVisitor.py @@ -0,0 +1,58 @@ +from AritVisitor import AritVisitor +from AritParser import AritParser + + +class UnknownIdentifier(Exception): + pass + + +class MyAritVisitor(AritVisitor): + """Visitor that evaluates an expression. Derives and overrides methods + from ArithVisitor (generated by ANTLR4).""" + def __init__(self): + self._memory = dict() # store id -> values + + def visitNumberAtom(self, ctx): + try: + value = int(ctx.getText()) + return value + except ValueError: + return float(ctx.getText()) + + def visitIdAtom(self, ctx): + try: + return self._memory[ctx.getText()] + except KeyError: + raise UnknownIdentifier(ctx.getText()) + + def visitMultiplicationExpr(self, ctx): + # Recursive calls to children. The visitor will choose the + # appropriate method (visitSomething) automatically. + leftval = self.visit(ctx.expr(0)) + rightval = self.visit(ctx.expr(1)) + # an elegant way to match the token: + if ctx.multop.type == AritParser.MULT: + return leftval * rightval + else: + return leftval / rightval + + def visitAdditiveExpr(self, ctx): + leftval = self.visit(ctx.expr(0)) + rightval = self.visit(ctx.expr(1)) + if ctx.addop.type == AritParser.PLUS: + return leftval + rightval + else: + return leftval - rightval + + def visitExprInstr(self, ctx): + val = self.visit(ctx.expr()) + print('The value is ' + str(val)) + + def visitParens(self, ctx): + return self.visit(ctx.expr()) + + def visitAssignInstr(self, ctx): + val = self.visit(ctx.expr()) + name = ctx.ID().getText() + print('now ' + name + ' has value ' + str(val)) + self._memory[name] = val diff --git a/TP03/arith-visitor/arit.py b/TP03/arith-visitor/arit.py new file mode 100644 index 0000000..d488343 --- /dev/null +++ b/TP03/arith-visitor/arit.py @@ -0,0 +1,28 @@ +from AritLexer import AritLexer +from AritParser import AritParser +# from AritVisitor import AritVisitor +from MyAritVisitor import MyAritVisitor, UnknownIdentifier + +from antlr4 import InputStream, CommonTokenStream +import sys + +# example of use of visitors to parse arithmetic expressions. +# stops when the first SyntaxError is launched. + + +def main(): + lexer = AritLexer(InputStream(sys.stdin.read())) + stream = CommonTokenStream(lexer) + parser = AritParser(stream) + tree = parser.prog() + print("Parsing : done.") + visitor = MyAritVisitor() + try: + visitor.visit(tree) + except UnknownIdentifier as exc: + print('Unknown identifier: {}'.format(exc.args[0])) + exit(-1) + + +if __name__ == '__main__': + main() diff --git a/TP03/arith-visitor/myexample b/TP03/arith-visitor/myexample new file mode 100644 index 0000000..53c1d21 --- /dev/null +++ b/TP03/arith-visitor/myexample @@ -0,0 +1,5 @@ +1 ; +12 ; +1+2 ; +1+2*3+4; +(1+2)*(3+4); diff --git a/TP03/arith-visitor/test_arith_visitor.py b/TP03/arith-visitor/test_arith_visitor.py new file mode 100644 index 0000000..47e4d4d --- /dev/null +++ b/TP03/arith-visitor/test_arith_visitor.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +from AritLexer import AritLexer +from AritParser import AritParser +import pytest +from MyAritVisitor import MyAritVisitor + +from antlr4 import InputStream, CommonTokenStream +import sys + + +@pytest.mark.parametrize("input, expected", [ + pytest.param('1+1;', 2), + pytest.param('2-1;', 1), + pytest.param('2*3;', 6), + pytest.param('6/2;', 3), + pytest.param('set x=42; x+1;', 43), + pytest.param('set x=42; set x=12; x+1;', 13) +]) +def test_expr(input, expected): + lexer = AritLexer(InputStream(input)) + stream = CommonTokenStream(lexer) + parser = AritParser(stream) + tree = parser.prog() + print("Parsing : done.") + visitor = MyAritVisitor() + + def patched_visit(self, ctx): + self.last_expr = self.visit(ctx.expr()) + + visitor.visitExprInstr = patched_visit.__get__(visitor) + visitor.visit(tree) + assert visitor.last_expr == expected + + +if __name__ == '__main__': + pytest.main(sys.argv) diff --git a/TP03/tp3.pdf b/TP03/tp3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c5d590a126733be29d5e9079605ea1936dc465fe GIT binary patch literal 197465 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≥4{95=iht$OW&xiIyUdg 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

Eu5NE@I~3Aw^Wwy;8|SR%^OkPY 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 literal 0 HcmV?d00001 diff --git a/TP03/tree/Tree.g4 b/TP03/tree/Tree.g4 new file mode 100644 index 0000000..5698625 --- /dev/null +++ b/TP03/tree/Tree.g4 @@ -0,0 +1,16 @@ +grammar Tree; + + +int_tree_top : int_tree EOF #top + ; + +int_tree: INT #leaf + | '(' INT int_tree+ ')' #node + ; + + +INT: [0-9]+; +WS : (' '|'\t'|'\n')+ -> skip; + + +