Answers.Body: <p>I'm happy to stand corrected if someone else comes in with a more experienced answer, but automata and formal languages are typically taught together as two aspects of computational theory, since different sorts of automata represent different sorts of languages.  Among other reasons, it's hard to have a discussion about the computing power of modified automata without having the languages to refer to.</p>
  
  <p>As for compilers and parsers, if the goal of a compilers course is to show a student how written code can be translated into machine code, how could you approach one without the other?  "This compiler takes a... tree... and turns it into machine code." The topics are significantly enough interrelated that I would have trouble imagining a sequence where they don't get mixed in together.</p>
  
  <p>I believe (though I have not done a thorough search of course sequences to back this up) that compilers is typically taught sometime after computational theory, since it helps to be at least nominally familiar with the notion of a grammar before you begin.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-01-01T15:28:59.893Z
Answers.Text: Indeed, i believe automata/formal languages course was a pre-req for compilers; nevertheless, we covered the necessary elements of CFGs at the beginning of compilers.
Answers.UserDisplayName: D. Ben Knoble
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-12-09T04:29:27.783Z
Answers.LastActivityDate: 2019-12-09T04:29:27.783Z
Answers.UserDisplayName: Ben I.
Answers.Body: <p>From my experience: compilers is basically the crown jewel subject where all the others come together.</p>
  
  <p>First year you start out with regular languages and finite state automata, and you see how that relates to your basic programming class. In two other classes, you see how propositional logic relates to basic circuit design.</p>
  
  <p>Second year, you get into context-free grammars and in a class that only somewhat feels related to it, concepts of programming languages. Meanwhile you get computer architecture making a bridge from hardware to assembly language.</p>
  
  <p>Third year, compiler construction brings them all together.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-12-09T12:00:12.770Z
Answers.Text: Welcome to [cseducators.se]. Nice first post. I hope we get to hear more from you!
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-12-09T09:02:52.733Z
Answers.LastActivityDate: 2019-12-09T09:02:52.733Z
Answers.UserDisplayName: ObscureOwl
Body: <p>What is the most traditional or meaningful order for learning formal languages, automata, compilers and parsing, if there's one at all? </p>
  
  <p>Would students benefit from a parallel course in formal languages/automata, so as to highlight the connections?</p>
  
Tags: <curriculum-design>
Title: Order of learning formal languages, automata, compilers and parsing
ThreadText: # Order of learning formal languages, automata, compilers and parsing
  
  (Asked by: username_0 on 2019-12-09)
  
  What is the most traditional or meaningful order for learning formal languages, automata, compilers and parsing, if there's one at all?
  
  Would students benefit from a parallel course in formal languages/automata, so as to highlight the connections?
  
  **Tags:** curriculum-design
  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_1 on 2019-12-09. Score: 11
  
  I'm happy to stand corrected if someone else comes in with a more experienced answer, but automata and formal languages are typically taught together as two aspects of computational theory, since different sorts of automata represent different sorts of languages. Among other reasons, it's hard to have a discussion about the computing power of modified automata without having the languages to refer to.
  
  As for compilers and parsers, if the goal of a compilers course is to show a student how written code can be translated into machine code, how could you approach one without the other? "This compiler takes a... tree... and turns it into machine code." The topics are significantly enough interrelated that I would have trouble imagining a sequence where they don't get mixed in together.
  
  I believe (though I have not done a thorough search of course sequences to back this up) that compilers is typically taught sometime after computational theory, since it helps to be at least nominally familiar with the notion of a grammar before you begin.
  
  > **Comments:**
  > **username_2**: Indeed, i believe automata/formal languages course was a pre-req for compilers; nevertheless, we covered the necessary elements of CFGs at the beginning of compilers.  
  
  ---
  
  ### Answer by username_3 on 2019-12-09. Score: 3
  
  From my experience: compilers is basically the crown jewel subject where all the others come together.
  
  First year you start out with regular languages and finite state automata, and you see how that relates to your basic programming class. In two other classes, you see how propositional logic relates to basic circuit design.
  
  Second year, you get into context-free grammars and in a class that only somewhat feels related to it, concepts of programming languages. Meanwhile you get computer architecture making a bridge from hardware to assembly language.
  
  Third year, compiler construction brings them all together.
  
  > **Comments:**
  > **username_1**: Welcome to [cseducators.se]. Nice first post. I hope we get to hear more from you!  
  
  ---
  
  