Change precedence level meaning + update TODO
This commit is contained in:
		
							parent
							
								
									4b14e6ac37
								
							
						
					
					
						commit
						bd45f47c47
					
				
							
								
								
									
										11
									
								
								TODO
								
								
								
								
							
							
						
						
									
										11
									
								
								TODO
								
								
								
								
							|  | @ -1,11 +1,7 @@ | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
| -                                TODO                                 - | -                                TODO                                 - | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
| K> Parsodus Parsodus parser | K> Reading terminals from lexesis + checking for unknown symbols | ||||||
|     -> Precedence + fill precedence in rules |  | ||||||
|     -> rule naming (problem: multiple rules same name -> change in backend) |  | ||||||
|         -> grammar struct change to contain optional name per rule |  | ||||||
|     -> Volgorde belangrijk? |  | ||||||
| -> Voorbeelden | -> Voorbeelden | ||||||
|     -> brainfuck? bare bones? bash transpiler? |     -> brainfuck? bare bones? bash transpiler? | ||||||
|     R> simple calculator |     R> simple calculator | ||||||
|  | @ -35,6 +31,11 @@ R> JSON port -> rewrite once named rules exist | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
| -                                DONE                                 - | -                                DONE                                 - | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
|  | K> Parsodus Parsodus parser | ||||||
|  |     -> Precedence + fill precedence in rules | ||||||
|  |     -> rule naming (problem: multiple rules same name -> change in backend) | ||||||
|  |         -> grammar struct change to contain optional name per rule | ||||||
|  |     -> Volgorde belangrijk? | ||||||
| -> logging | -> logging | ||||||
|     -> write configuration sets, table |     -> write configuration sets, table | ||||||
|     -> Generator: logging |     -> Generator: logging | ||||||
|  |  | ||||||
|  | @ -51,7 +51,7 @@ namespace pds { | ||||||
|         std::set<std::string> variables; ///< the variables
 |         std::set<std::string> variables; ///< the variables
 | ||||||
|         std::set<std::string> terminals; ///< the terminals
 |         std::set<std::string> terminals; ///< the terminals
 | ||||||
|         std::deque<std::shared_ptr<Rule>> rules; ///< the replacement rules
 |         std::deque<std::shared_ptr<Rule>> rules; ///< the replacement rules
 | ||||||
|         std::map<std::string, std::pair<int, PrecedenceType> > precedence; ///< lower value -> higher precedence
 |         std::map<std::string, std::pair<int, PrecedenceType> > precedence; ///< higher value -> higher precedence
 | ||||||
| 
 | 
 | ||||||
|         std::unique_ptr<util::FirstSet> first; |         std::unique_ptr<util::FirstSet> first; | ||||||
|         std::unique_ptr<util::FollowSet> follow; |         std::unique_ptr<util::FollowSet> follow; | ||||||
|  |  | ||||||
|  | @ -141,10 +141,10 @@ LRTable Generator<Itemset>::generate() { | ||||||
|                         auto rightTokenIt = m_gram.precedence.find(term); |                         auto rightTokenIt = m_gram.precedence.find(term); | ||||||
|                         if (m_gram.rules[rule_applied]->precedence.first && rightTokenIt != m_gram.precedence.end()) { |                         if (m_gram.rules[rule_applied]->precedence.first && rightTokenIt != m_gram.precedence.end()) { | ||||||
|                             auto& leftPrec = m_gram.rules[rule_applied]->precedence.second; |                             auto& leftPrec = m_gram.rules[rule_applied]->precedence.second; | ||||||
|                             if (leftPrec.first > rightTokenIt->second.first) { |                             if (leftPrec.first < rightTokenIt->second.first) { | ||||||
|                                 // Keep the shift
 |                                 // Keep the shift
 | ||||||
|                                 handled = true; |                                 handled = true; | ||||||
|                             } else if (leftPrec.first < rightTokenIt->second.first) { |                             } else if (leftPrec.first > rightTokenIt->second.first) { | ||||||
|                                 // replace with a reduce
 |                                 // replace with a reduce
 | ||||||
|                                 table.act[curIdx][term] = {Action::REDUCE, rule_applied}; |                                 table.act[curIdx][term] = {Action::REDUCE, rule_applied}; | ||||||
|                                 handled = true; |                                 handled = true; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue