Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
This is a large overhaul of monkey code. Before, only edits within
individual lines were tracked, which required a Prolog-specific method
for splitting a program into a list of lines for every rule. In this
version, modifications can be tracked within arbitrary code ranges.
Ranges to be tracked are determined by selecting "interesting" subtrees
in the AST of the starting code version.
The new method is simpler, less language-dependent and easier to extend.
The downside is that a program must be syntactically correct before we
can attempt to fix it (the previous approach could handle programs with
syntax errors in some cases).
This commit also integrates a call to monkey.fix in prolog_session.hint,
by running it if no other hint is found.
|
|
|
|
|
|
|
|
|
|
The parser is currently unused.
|
|
|
|
|
|
Instead of splitting the program by line numbers, do limited parsing
(enough to distinguish , in "memb(X,Y)" from , in "a :- b, c."). Each
token in the parsed program is annotated with rule and part number.
Rewrite monkey.fix.step to take program as a sequence of annotated
tokens instead of lists of lines and rules. Improve message passing to
website.
|
|
|
|
|
|
|
|
Remove trailing sequences of COMMAs and PERIODs when extracting edits
from a trace. This is because subgoal order is rarely important in
Prolog, and we don't care if the edit happened on the last line or not.
This means that we treat for example
"conc(A,B)," → "conc(A,B,C)." the same as
"conc(A,B)" → "conc(A,B,C)".
|
|
|
|
Importing pymonkey into webmonkey, let's see how this works.
|
|
Testing logic now lives in PrologEngine. The engine now has some notion
of problems and users, which is necessary to avoid repeatedly loading
code into Prolog.
TODO:
- support library loading
- fix PrologEngine.test for unusual cases (more than one solution, …)
- memoization of correct answers
|
|
This will allow us to match line edits to original source locations.
|
|
Return a single mapping instead of generating all possible permutations.
Only the first solution was used anyway, with little effect on found
solutions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|