complement notes in 10.02
This commit is contained in:
75
notes/4.md
75
notes/4.md
@@ -83,12 +83,12 @@ L -> S | L,S
|
|||||||
|
|
||||||
It can be represented as a NFA:
|
It can be represented as a NFA:
|
||||||
|
|
||||||
```python {cmd matplotlib}
|
```python {cmd matplotlib hide}
|
||||||
import sys
|
import sys
|
||||||
import pymupdf
|
import pymupdf
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
doc = pymupdf.open("../pdf/L4.pdf")
|
doc = pymupdf.open("../pdf/L4.pdf")
|
||||||
pix = doc[22].get_pixmap(dpi=500)
|
pix = doc[22].get_pixmap(dpi=360)
|
||||||
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
|
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
|
||||||
|
|
||||||
plt.imshow(img)
|
plt.imshow(img)
|
||||||
@@ -97,8 +97,73 @@ plt.tight_layout()
|
|||||||
plt.show()
|
plt.show()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* SLR(1) Parsing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* LR(1) Grammar
|
* LR(1) Grammar
|
||||||
|
|
||||||
|
|
||||||
|
```python {cmd matplotlib hide}
|
||||||
|
import sys
|
||||||
|
import pymupdf
|
||||||
|
from PIL import Image
|
||||||
|
doc = pymupdf.open("../pdf/L4.pdf")
|
||||||
|
pix = doc[47].get_pixmap(dpi=360)
|
||||||
|
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
|
||||||
|
|
||||||
|
plt.imshow(img)
|
||||||
|
plt.axis('off')
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.show()
|
||||||
|
```
|
||||||
|
|
||||||
|
LR(1) Parsing Table
|
||||||
|
|
||||||
|
is same as LR(0) parsing table construction except for reductions:
|
||||||
|
|
||||||
|
|
||||||
|
* LALR(1) Grammar
|
||||||
|
|
||||||
|
LALR(1) generally has the same number of states as SLR (much less than LR(1))
|
||||||
|
for Pascal language, SLR requires several hundred states, LR(1) requires several thousand states.
|
||||||
|
|
||||||
|
#### Ambiguous Grammar
|
||||||
|
|
||||||
|
Ambiguity is mainly from
|
||||||
|
|
||||||
|
* Precedence
|
||||||
|
* The production at higher levels will have operators with lower priorities (and vice versa).
|
||||||
|
* we can insert non-terminals to enforce precendence.
|
||||||
|
* Associativity
|
||||||
|
* we should determine where to place recursion depending on the associativity
|
||||||
|
|
||||||
|
|
||||||
|
for example: `if-then-else`
|
||||||
|
|
||||||
|
|
||||||
|
**Automatic Disambiguation**
|
||||||
|
|
||||||
|
We can define precedence to use ambiguous grammars w/o shift-reduce conflicts.
|
||||||
|
|
||||||
|
|
||||||
|
## AST
|
||||||
|
|
||||||
|
### AST Construction LL
|
||||||
|
|
||||||
|
```c
|
||||||
|
expr parse_S() {
|
||||||
|
switch(token) {
|
||||||
|
case num:
|
||||||
|
case '(':
|
||||||
|
expr child1 = parse_E();
|
||||||
|
expr child2 = parse_Sp();
|
||||||
|
return new S(child1, child2);
|
||||||
|
default:
|
||||||
|
parseError();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### AST Construction LR
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user