Life Cycle

Phase 1

Our compiler group and the development cycle of our project changed several times over the semester. We initially started as a group of three. During this beginning phase we were working on building the scanner. This work was fairly easy to divide up amongst group members as it consisted mainly of designing a number of finite state automata and converting those automata into program code. After outlining the main structure of our scanner we divided the total number of microPascal tokens into equal parts that we could work on in our own time. This was facilitated by our choice to use GitHub as our central project control, so we could each work and share information quickly when we had time.

Phase 2

The next stage of development saw an additional member added to our group. This phase consisted of building the parser, which was also easy to divide and conquer as it focused on systematically breaking down the grammar rules of microPascal into program code. We followed the standard instructions given by our professor to build an LL(1) table for our grammar and then convert that table into a structured set of grammar rules in our code. Again we assigned each group member a number of these rules to implement individually, then afterwards we worked as a team to review and debug each other’s work.

Phase 3

The final stage, building the semantic analyzer, required us to change our development strategy for two separate reasons: the coding requirements of the project were very different and we absorbed two more team members into the group. To tackle this challenge we turned more toward a group based approach, meeting as a team to discuss implementation strategies and then assigning those strategies to specific members for coding. Debugging was a shared effort, with members both working on the code on their own time as well as during the team meetings. Again our GitHub repository enabled us to seamlessly integrate these different strategies as each member had immediate access to the most recent work. The only challenge to this was when during debugging more than one member happened to alter the same code. We quickly recognized this as a possible hindrance and set up a schedule for the final weeks of work during which we could individually code and debug without fear of overlapping changes.