This is a summary of best practices when using Makefiles. This post is primarily intended for my students building tools in our lab. Much of this post is based on the Make bestpractices that I learned during my stint at Sun Microsystems, updated to reflect GNU Make since it is the most common make flavour at this point by a significant margin. (GNU) Makefiles best practices Automatic variables are your friends. $@ is the name of the target. Make it a habit to touch $@ at the end of the make r...| Rahul Gopinath
Contents Definitions Building a Tiny Prolog in PythonVariables Predicates Goals Lists Environment Unification Resolution ReferencesArtifacts Important:Pyodide takes time to initialize. Initialization completion is indicated by a red border around Run all button. TLDR; This tutorial is an implementation of a toy prolog interpreter in Python. It is based on an earlier implementation here that has since disappeared. Definitions For this post, we use the following terms: A fact is a statement tha...| Rahul Gopinath
Contents DefinitionsPrerequisites Building the NFAAugment Grammar with Start The State Data-structure The NFA classNFA Initialization routines NFA Start State (create_start) Advance the state of parse by one token NFA find_transitions NFA build_nfa Constructing a graph LR0 AutomataClosureCompiling DFA States Building the DFAItem DFAState LR(0) DFADFA Compute the closure DFA Start State (create_start) Advance the state of parse by the given token DFA find_transitions add_reduce LR0DFA build_df...| Rahul Gopinath
Search Based Fuzzing involves generating various candidate inputs for a given program, identifying the inputs with the best score in some metric of effectiveness and choosing them for the next iteration so that one can iteratively improve the fitness of the given population of inputs. In the previous post I discussed how you can score inputs using approach level. Approach level (or approximation level) is reasonable to compute the distance we have to traverse to reach a given node. However, i...| Rahul Gopinath
Fuzzing is one of the more easy to use and efficient means of testing software systems. The idea is that we produce random inputs that are then executed by the system. If the system does something unexpected (such as crashing) then we know that the path taken by the execution was not considered by the programmer, and that such a path may be exploited to make the program do something that was unintended by the developer. However, simply throwing random inputs at the program does not work well ...| Rahul Gopinath
TL;DR This tutorial explains how to design test cases that effectively cover features of a given context-free grammar using the k-path strategy. Note: The k-path strategy discussed here is unrelated to the k-path cover from graph theory. Definitions For this post, we use the following terms as we have defiend previously: The alphabet is the set all of symbols in the input language. For example, in this post, we use all ASCII characters as alphabet. A terminal is a single alphabet symbol. For ...| Rahul Gopinath
TLDR; This tutorial takes you through the steps to write a simple context-free grammmar that can parse your custom data format. The Python interpreter is embedded so that you can work through the implementation steps. Definitions For this post, we use the following terms as we have defiend previously: The alphabet is the set all of symbols in the input language. For example, in this post, we use all ASCII characters as alphabet. A terminal is a single alphabet symbol. For example, x is a term...| Rahul Gopinath
Note: You can view this post in the hosted activitypub instance here For those who are impatient, here is the quick and dirty procedure: Contents DNS Ktistec Oracle CloudHTTPS Frontend. Binary instead of Docker DNS You need a domain name for this to work. You have two choices (a) Head over to any of the domain registrars like domains.google and buy a domain name– say mydomain.org, or (b) use a free dynamic dns service like freemyip which will get you something like mydomain.freemyip.com. If...| Rahul Gopinath
Research in Software Engineering from Rahul Gopinath| rahul.gopinath.org
Research in Software Engineering from Rahul Gopinath| rahul.gopinath.org
Research in Software Engineering from Rahul Gopinath| rahul.gopinath.org
Research in Software Engineering from Rahul Gopinath| rahul.gopinath.org
Research in Software Engineering from Rahul Gopinath| rahul.gopinath.org