Precedense aware parser #10

Closed
opened 2022-05-09 19:59:43 +02:00 by robben · 7 comments
robben commented 2022-05-09 19:59:43 +02:00 (Migrated from engi.evolpe.it)

Aktualnie parser parsuje jak leci, nie zwracając uwagi na precedensję. Rozwiązaniem jest "naprawa" drzewa po sparsowaniu wyrażeń.

Proponowaną techniką jest ta zaprezentowana przez jblow'a, prawdopodobnie operaty o następujący artykuł: Parsing Expression Grammars Made Practica autorstwa Nicolasa Laurenta i Kim Mensa

Aktualnie parser parsuje jak leci, nie zwracając uwagi na precedensję. Rozwiązaniem jest "naprawa" drzewa po sparsowaniu wyrażeń. Proponowaną techniką jest [ta zaprezentowana przez jblow'a](https://www.youtube.com/watch?v=MnctEW1oL-E&t=4070s), prawdopodobnie operaty o następujący artykuł: [Parsing Expression Grammars Made Practica](https://arxiv.org/pdf/1509.02439v1.pdf) autorstwa Nicolasa Laurenta i Kim Mensa
robben commented 2022-05-09 19:59:44 +02:00 (Migrated from engi.evolpe.it)

changed due date to May 13, 2022

changed due date to May 13, 2022
robben commented 2022-05-09 19:59:44 +02:00 (Migrated from engi.evolpe.it)

assigned to @robben

assigned to @robben
robben commented 2022-05-15 22:37:25 +02:00 (Migrated from engi.evolpe.it)

changed due date to May 16, 2022

changed due date to May 16, 2022
robben commented 2022-05-21 19:53:11 +02:00 (Migrated from engi.evolpe.it)

changed due date to May 23, 2022

changed due date to May 23, 2022
robben commented 2022-05-21 19:53:24 +02:00 (Migrated from engi.evolpe.it)

changed due date to May 25, 2022

changed due date to May 25, 2022
robben commented 2022-06-20 05:47:48 +02:00 (Migrated from engi.evolpe.it)

Done ea1dddaf26

Done ea1dddaf26e9e9c0969d656fe082d680f798e86a
robben commented 2022-06-20 05:49:15 +02:00 (Migrated from engi.evolpe.it)

Design aktualnego działania:

10 + 20 * 30

parse_infix_expression
	10 +
		parse_rhs_of_infix_expression(1)
			20 *
				parse_rhs_of_infix_expression(2)
					30
			(20 * 30) ponieważ precedense(+) < precedense(*)
	10 + (20 * 30)

-------------------------------------------------------------------

10 * 20 + 30

parse_infix_expression
	10 *
		parse_rhs_of_infix_expression(Base, 2)
			20 +
			ponieważ precedense(*) > precedense(+)
				self = (Base * 20)

			parse_rhs_of_infix_expression(1)
				30

			(self + 30)

Design aktualnego działania: ``` 10 + 20 * 30 parse_infix_expression 10 + parse_rhs_of_infix_expression(1) 20 * parse_rhs_of_infix_expression(2) 30 (20 * 30) ponieważ precedense(+) < precedense(*) 10 + (20 * 30) ------------------------------------------------------------------- 10 * 20 + 30 parse_infix_expression 10 * parse_rhs_of_infix_expression(Base, 2) 20 + ponieważ precedense(*) > precedense(+) self = (Base * 20) parse_rhs_of_infix_expression(1) 30 (self + 30) ```
Sign in to join this conversation.
No Label
bug
enhancement
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: s416496/musique#10
No description provided.