Make expression parsing parse more valid syntax.
This commit is contained in:
		
							parent
							
								
									c8ec93880e
								
							
						
					
					
						commit
						1d0ea602a5
					
				@ -368,6 +368,10 @@ int _parser_can_postfix_follow(enum parser_expression_type type) {
 | 
				
			|||||||
    return type == EXPR_CLOSE_PARENTH || type == EXPR_ATOM || type == EXPR_OP_POSTFIX;
 | 
					    return type == EXPR_CLOSE_PARENTH || type == EXPR_ATOM || type == EXPR_OP_POSTFIX;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int _parser_can_atom_follow(enum parser_expression_type type) {
 | 
				
			||||||
 | 
					    return !(type == EXPR_CLOSE_PARENTH || type == EXPR_OP_POSTFIX || type == EXPR_ATOM);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libab_operator* _parser_find_operator(struct parser_state* state, libab_lexer_match* match) {
 | 
					libab_operator* _parser_find_operator(struct parser_state* state, libab_lexer_match* match) {
 | 
				
			||||||
    char op_buffer[8];
 | 
					    char op_buffer[8];
 | 
				
			||||||
    size_t token_size = match->to - match->from;
 | 
					    size_t token_size = match->to - match->from;
 | 
				
			||||||
@ -496,7 +500,7 @@ libab_result _parse_expression(struct parser_state* state, libab_tree** store_in
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            new_type = EXPR_OP_INFIX;
 | 
					            new_type = EXPR_OP_INFIX;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            if(last_type == EXPR_ATOM) break;
 | 
					            if(!_parser_can_atom_follow(last_type)) break;
 | 
				
			||||||
            result = _parser_append_atom(state, &out_stack);
 | 
					            result = _parser_append_atom(state, &out_stack);
 | 
				
			||||||
            new_type = EXPR_ATOM;
 | 
					            new_type = EXPR_ATOM;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user