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
- Reference: Crafting Interpreters. Print statement is not able to evaluate expression. Help me fix this (details below)
- Load function written in amd64 assembly into memory and call it
- I have implemented till Statements and State in Tree Walk Interpreter. I am pissed with an error
- Resolve shift/reduction conflict in grammar for expressions in PLY for calls to embedded functions
- Grammar for access to properties and calls to embedded functions
- LLVM code generation causes problems with pointer arithmetic
- what does react compiler mean actually?
- Errors on Recursive Descent Parsing Java
- Java CUP produces Shift-Reduce conflict when parsing a grammar for a C++ type language
- Three-Address-Code (TAC) and Conjunction/Disjunction
- How do I write an implicit cast for my strongly typed interpreter? (C++)
- Yacc parser not reducing specific production rules as intended
- Why is the function version tag consistently "Base" in HDF5 library?
- Sly parser, how are recursively defined types implemented?
- Does a non terminal token need an explicit definition?
Related Questions in CONTEXT-FREE-GRAMMAR
- Resolve shift/reduction conflict in grammar for expressions in PLY for calls to embedded functions
- Grammar for access to properties and calls to embedded functions
- Need clarification on pumping lemma for context free languages
- Java CUP produces Shift-Reduce conflict when parsing a grammar for a C++ type language
- Correct labeling for this regular language?
- How to recognize a context free grammar with a rust declarative macro
- Maximum recursion depth exceeded with nltk recursive descent parser
- Constructing grammar based on given rules
- how to find the grammar of this Language?
- ANTLR4 - parse function-like structures in regular text
- Context Free Grammar for L= { a^n b^m c^m d^2n }, where n and m are >= 0
- Is this grammar LALR(1)?
- How can I generate a Context Free Grammar for a specific language
- How to auto-complete JSON syntax strings?
- I have a problem in reducing a grammar to LL(1)
Related Questions in BNF
- Parsers and BNF grammar
- function file/2 undefined in generated code from Erlang's yecc
- How to represent {} in EBNF syntax parse tree
- BNF grammar to recoganize of legal combination of C keywords
- Python Assignment statement
- Is there a way to achieve a mutually recursive ADT in Kotlin?
- What is the most optimal way to create an if statement, or logic in general, in Nearley?
- What is the trick to parsing a C assignment-expression with no backtracking?
- Is there a standard Backus-Naur form for checking that lists contain consistent token types?
- Is there a parsing algorithm for languages generated by context-sensitive grammars?
- how to freeze part of an expression for several other expressions gramEvol R package
- convert R code to BNF form ( Backus–Naur form )
- gramEvol package Error in 1:possible.choices : argument of length 0
- Parsing formulas using Lark / EBNF
- Create a NFA from BNF grammar
Related Questions in CONTEXT-FREE-LANGUAGE
- Context Free Grammar for L= { a^n b^m c^m d^2n }, where n and m are >= 0
- NLTK tell if word is generated by CFG
- Why pumping lemma for context free languages do not have bound on first part of string?
- Recognize the type of the given formal language
- CFGs for languages L1 and L2 where #a's > #b's and #a's >= #b's
- concatenation of a context-free language
- what is the Context-Free Grammar for the following language?
- Can this language be expressed with a regular expression?
- Is there any way to count the production of specific rules in order in a context free grammar?
- CFG for L={ a^n b^m : n <= m+3 , n,m>=0}
- Is the language L = { a^n b^j : j ≤ n ≤ 2j − 1 } context-free?
- Specification of DFA accepting ≡∪∈N
- How can I define ε when I'm writing the grammar rules in parsing code?
- CFG for L = {a^mb^nc^k: k = m×n}
- 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?
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.