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.
How to create a context-free grammar?
937 Views Asked by user4257025 At
1
There are 1 best solutions below
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
- JavaCC and Unicode issue. Why \u696d cannot be managed in JavaCC although it belong to the range "\u4e00"-"\u9fff"
- Three-address code and symbol tables
- Delegate caching behavior changes in Roslyn
- Get delimiter in Irony
- Compiler Errors including initializer before '<' token
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?
- CFG to Regular expression
- How to fix shift-reduce conflict in this grammar
- How to deal with some ambiguous context free grammar productions in Python
- writing a parser in prolog
- How to Generate and display ParseTree for an expression in C# using Irony?
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
- How can I generate a parser with Jison which deals with grammar ambiguity?
- How to use EBNF groups properly in Jison
- Function definition in Julia
- Elegant way of extracting substrings matching regex?
- Question regarding BNF
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?
- CFG for L = {a^mb^nc^k: k = m×n}
- bounded PDA and context-free languages
- Describe the language generated by this context-free grammar
- Context-free grammar for the language L = {a^(n)b^(m)c^(k): m = |i - k|}
- What makes this example a context-free language rather than regular language?
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)
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?
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.