I know that a bottom-up parser is better than a top-down parser because it can accept left-recursive grammar, what can be other reasons that we prefer bottom-up parsing over top-down parsing?
Parsing the Context-free-Grammars
598 views Asked by Amna Ahmed At
2
There are 2 answers
0
blaze
On
We have bottom-up parsers generators like byson. Using them is much simpler then writing parsers manually.
Also, recursive descent parsers make all operations right-associative by default, which is incorrect for arithmetics. Turning them back to left-associative requires additional steps in parsing.
Related Questions in ALGORITHM
- MCNP 6 - Doubts about cells
- Given partially sorted array of type x<y => first apperance of x comes before first of y, sort in average O(n)
- What is the algorithm behind math.gcd and why it is faster Euclidean algorithm?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- Dots and Boxes with apha-beta pruning
- What is the average and worst-case time complexity of my string searching algorithm?
- Building a School Schedule Generator
- TC problem 5-2:how to calculate the probability of the indicator random variable?
- LCA of a binary tree implemented in Python
- Identify the checksum algorithm
- Algorithm for finding a subset of nodes in a weighted connected graph such that the distance between any pair nodes are under a postive number?
- Creating an efficent and time-saving algorithm to find difference between greater than and lesser than combination
- Algorithm to find neighbours of point by distance with no repeats
- Asking code suggestions about data structure and algorithm
- Heap sort with multithreading
Related Questions in PARSING
- TypeScript: Type checking while parsing an arbitrary JSON that is typed/
- How to have fixed options using Option.Applicative in haskell?
- How to convert mathematical expression to lambda function in C++?
- JsonObject throws an exception: JSONObject["employer_website"] is not a string (class org.json.JSONObject$Null : null)
- Trying to fix my c++ code for it to read the right amount of nodes from a file
- Selenium get page after "loading" page
- Parse tag in html via Google Sheets (importxml)
- FluentD / Fluent-Bit: Concatenate multiple lines of log files and generate one JSON record for all key-value from each line
- Editing non-String values in JComboBox
- Handling multiple errors in Bison parser
- Which is the most idiomatic way to parse an i32 from ascii in Rust
- I got this error from a JSON Validator - what does this mean?
- Conflict between lexer rules in ANTLR4 for Fortran grammar
- mqtt message parsing problem in a node.js
- How to print error code from URL response in swift
Related Questions in LL-GRAMMAR
- How to auto-complete JSON syntax strings?
- How to turn a Grammar to LR(0)
- Is there a simple example how Earley parser outperforms (or allows less verbose grammar than) LL(k) parser?
- Grammer Left Factoring
- Is this rule LL(1)?
- Definition of First and Follow sets of the right-hand sides of production
- Epsilon(ε) productions and LR(0) grammars and LL(1) grammars
- antlr parsing of java 8 file (python binding) - slow running time
- Why do we need FOLLOW set in LL(1) grammar parser?
- How to handle operator precedence in an LL(1) parser
- John Hughes' Deterministic LL(1) parsing with Arrow and errors
- What happens if you directly use LL grammar for an LR parser, after making basic syntactical changes?
- Does an empty column in an LL(1) parsing table mean that it is wrong?
- PEGjs grammar star (*) not matching as expected
- How to have shortest match first when implementing mark down text styling operators in an antlr4 grammar?
Related Questions in LR-GRAMMAR
- Java CUP produces Shift-Reduce conflict when parsing a grammar for a C++ type language
- Does Golang have LR(1) grammar?
- Using Tree Sitter, How to disable extras in string literal?
- How to turn a Grammar to LR(0)
- How to handle epsilon production in CLR(1) parsing?
- How to understand Example-4.64 of the syntax analysis chapter in Dragon Book?
- LALR, LR(1) and SLR
- checking if the following grammar is LR(0) and LR(1)
- Grammar parser for parsing parliamentary debates?
- SLR(1) and LALR(1) grammar conflicts
- Should a merge failure stop the LR(1) to LALR(1) conversion
- LR(1) item sets for left recursive grammar
- Epsilon(ε) productions and LR(0) grammars and LL(1) grammars
- Preferring shift over reduce in parser for language without statement terminators
- SR conflict in LR(0) and SLR(1) will always be equal for some context free grammar?
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)
Theoretically speaking, the LL(k) grammars are always strict subsets of the LR(k) grammars for any k, so deterministic predictive bottom-up parsers can accept a strictly greater set of grammars than than deterministic predictive top-down parsers. This also means that any LL(k) grammar is also LR(k).
Also, a tricky proof shows that any deterministic CFL (a CFL accepted by a deterministic push down automaton) has an LR(1) grammar, which means that LR grammars correspond precisely to those languages that have efficient stack-based parsing algorithms.
That said, if you allow for more general parsing algorithms like Unger's algorithm, Earley's algorithm, or the CYK algorithm, then top-down and bottom-up methods exist for parsing arbitrary CFGs. These algorithms can be much slower than the predictive methods, though, so they typically aren't used for programming languages.
Hope this helps!