Tôi hiện đang cố gắng triển khai trình tạo trình phân tích cú pháp LALR như được mô tả trong "các kỹ thuật và công cụ nguyên tắc biên dịch" (còn được gọi là "cuốn sách rồng").LALR Parser Generator Implementation Problem
Rất nhiều thứ đã hoạt động. Trình tạo trình phân tích cú pháp hiện có thể tạo ra biểu đồ goto đầy đủ.
Example Grammar:
S' --> S
S --> C C
C --> c C
C --> d
Nonterminals: S', S, C
Terminals: c, d
Start: S'
Các goto-graph:
I[0]---------------+ I[1]-------------+
| S' --> . S , $ |--S-->| S' --> S . , $ |
| S --> . C C , $ | +----------------+
| C --> . c C , c |
| C --> . c C , d | I[2]--------------+
| C --> . d , c | | S --> C . C , $ | I[3]--------------+
| C --> . d , d |--C-->| C --> . c C , $ |--C-->| S --> C C . , $ |
+------------------+ | C --> . d , $ | +-----------------+
| | +-----------------+
| | +--c--+ | |
| | | | c |
| | | v v |
| | I[4]--------------+ |
| c | C --> c . C , c | |
| | | C --> c . C , d | |
| | | C --> c . C , $ | d
| | | C --> . c C , c | |
| +---->| C --> . c C , d | |
| | C --> . c C , $ | |
d | C --> . d , c |--+ |
| +-----| C --> . d , d | | |
| | | C --> . d , $ | | |
| | +-----------------+ | |
| C | |
| | I[6]--------------+ | |
| | | C --> c C . , c | d |
| +---->| C --> c C . , d | | |
| | C --> c C . , $ | | |
| +-----------------+ | |
| | |
| I[5]------------+ | |
| | C --> d . , c |<---+ |
+------->| C --> d . , d | |
| C --> d . , $ |<-----+
+---------------+
Tôi có trubbles với việc thực hiện các thuật toán để tạo ra các hành động bàn! thuật toán của tôi tính toán đầu ra sau đây:
state | action
| c | d | $
------------------------
0 | s4 | s5 |
------------------------
1 | | | acc
------------------------
2 | s4 | s5 |
------------------------
3 | | | r?
------------------------
4 | s4 | s5 |
------------------------
5 | r? | r? | r?
------------------------
6 | r? | r? | r?
sx ... chuyển sang trạng thái x
rx ... giảm trạng thái x
Các r? có nghĩa là tôi không biết làm thế nào để có được trạng thái (?) mà trình phân tích cú pháp sẽ giảm. Có ai biết một thuật toán để có được? sử dụng biểu đồ goto ở trên?
Nếu bất cứ điều gì được mô tả không đủ rõ ràng, vui lòng hỏi và tôi sẽ cố gắng giải thích tốt hơn! Cảm ơn sự giúp đỡ của bạn!
cảm ơn rất hữu ích !!! – raisyn