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
- Overlapping UICollectionView in storyboard
- Cannot pod spec lint because of undeclared type errors
- Is the transactionReceipt data present in dataWithContentsOfURL?
- UIWebView Screen Fitting Issue
- ZXingObjC encoding issues
- iOS: None of the valid provisioning profiles allowed the specific entitlements
- How to hide "Now playing url" in control center
- CloudKit: Preventing Duplicate Records
- Slow performance on ipad erasing image
- Swift code with multiple NSDateFormatter - optimization
Related Questions in CONTEXT-FREE-GRAMMAR
- Overlapping UICollectionView in storyboard
- Cannot pod spec lint because of undeclared type errors
- Is the transactionReceipt data present in dataWithContentsOfURL?
- UIWebView Screen Fitting Issue
- ZXingObjC encoding issues
- iOS: None of the valid provisioning profiles allowed the specific entitlements
- How to hide "Now playing url" in control center
- CloudKit: Preventing Duplicate Records
- Slow performance on ipad erasing image
- Swift code with multiple NSDateFormatter - optimization
Related Questions in BNF
- Overlapping UICollectionView in storyboard
- Cannot pod spec lint because of undeclared type errors
- Is the transactionReceipt data present in dataWithContentsOfURL?
- UIWebView Screen Fitting Issue
- ZXingObjC encoding issues
- iOS: None of the valid provisioning profiles allowed the specific entitlements
- How to hide "Now playing url" in control center
- CloudKit: Preventing Duplicate Records
- Slow performance on ipad erasing image
- Swift code with multiple NSDateFormatter - optimization
Related Questions in CONTEXT-FREE-LANGUAGE
- Overlapping UICollectionView in storyboard
- Cannot pod spec lint because of undeclared type errors
- Is the transactionReceipt data present in dataWithContentsOfURL?
- UIWebView Screen Fitting Issue
- ZXingObjC encoding issues
- iOS: None of the valid provisioning profiles allowed the specific entitlements
- How to hide "Now playing url" in control center
- CloudKit: Preventing Duplicate Records
- Slow performance on ipad erasing image
- Swift code with multiple NSDateFormatter - optimization
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.