I am learning compilers and I am troubled by how to create the context-free grammar of a language. Is there a method I can follow to create the context-free grammar for most language ? I'm new to this field so the question is basic,and I hope you can help me.
Related Questions in COMPILER-CONSTRUCTION
- Is the compiler Xcode uses to produce Assembly code a bad compiler?
- How do compilers store hundreds of variables in only a few registers?
- Where to patch back the information gathered during program analysis
- Assignment Insertion in ROSE compiler after AssignOp
- memory layout of a multiple-inherited object in C++
- How to use my written compiler to read files on web?
- a LEX program to identify keywords and convert it into uppercase
- Identifier terminal except certain keywords
- Calling Scala compiler's AST from Java
- Computing the FOLLOW() set of a grammar
Related Questions in CONTEXT-FREE-GRAMMAR
- Strings from grammar
- Grammar: Precedence of grammar alternatives
- Context Free Grammar BNF
- Xtext grammar describing cron expression not working as expected
- can removing left recursion introduce ambiguity?
- How to match with a expression grammar only the last time a keyword occurs occurs
- This LL(1) parse table is correct?
- syntax-directed definition to determine the type of expression
- Nullable nonterminals
- Is ε terminal in context-free?
Related Questions in BNF
- How to write the syntax grammar of this diagram
- Context Free Grammar BNF
- extern followed by string literal
- Is it incorrect online version of EBNF standard, or incorrect the chapter's name by mr. Pattis?
- BNF grammar for a palindrome
- Grako left recursion
- How can I understand this binary expression grammar?
- What BNF Variant is This?
- How to create a context-free grammar?
- Parser combinator grammar not yielding correct associativity
Related Questions in CONTEXT-FREE-LANGUAGE
- L = {www| w belongs to {0,1}*} prove via pumping lemma
- Is this a context free or context sensitive language?
- How to create a context-free grammar?
- 1 or 2 right hand side variable in Context free language
- context-free matching of characters
- Why pumping lemma for context free languages do not have bound on first part of string?
- NLTK tell if word is generated by CFG
- Implementation of a context-free grammar for logical operators with parentheses
- CFG for a = b and c = d (length)
- In Context Free Grammer, do we replace all variable during a substitution? or can we apply substitution rule to only of the variable of same type?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Most language specifications come with a grammar formalism that gives you a basis for designing a specific grammar.
The need for a specific grammar comes from a choice of parser technology; your grammar will have to honor the limitations (they all have some) of that parser technology. So your first question should be, "What parser generator am I going to use?" (including if you insist, "none [recursive descent]" followed by a careful consideration of why you are using that parser generator (often being, "its the first thing I found, or Mikey likes it", both of which are rotten reasons). In particular, having considered a specific parser generator, you can consider the language spec itself to decide if the parser generators's shortcomings are likely to be an issue. This choice isn't helped much by the huge set of possible answers, but that's your problem as a an engineer.
Once you've chosen a parser generator, then you take the grammar formalism from the language spec, and try to bend it to the parser generator's limitations. This is where most of your "creation" work will come from. The experience of doing this several times on smaller languages is pretty helpful when faced with doing a large complex language.
If you have a langauge with no obvious reference grammar, you have a much harder time. YOu'll have to guess at grammar rules for the various langauge constructs, and how those rules are combined into larger program structures. If this is the problem you facing, you better have had experience building a number of other working grammars or you are likely to be hopelessly lost. (COBOL is really fun here.)
Once you get a grammar that is apparently acceptable to your parser generator, then you need to run as much code for that language as you can through your parser. This is to help uncover mistakes in your grammar, and inconsistencies or misintretations of the standard document. You will also find that source code for "your language" as processed by other compilers may contain a lot of surprises, added by the other compilers, just because they can.
Good luck.