- ... node
![[*]](footnote.png)
- note that non-terminal leaf nodes don't make any sense, but they would contain a match, as well
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... operator
![[*]](footnote.png)
- APaGeD makes use of that, because the lexer has to match all D lexemes, while the APaGeD grammar itself only uses a small subset
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... places
![[*]](footnote.png)
- like XML does, for example
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... semantics
![[*]](footnote.png)
- if you want to parse documentation comments, put them into the main grammar
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... matchers
![[*]](footnote.png)
- most regular expression engines use backtracking, which generally has exponential runtime complexity
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... lookahead
![[*]](footnote.png)
- like the one Perl regular expressions uses, for example
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... possible
![[*]](footnote.png)
- which LR parsers deal with more efficiently for the same reason
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... statement
![[*]](footnote.png)
- after the semicolon, for example
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... conflicts
![[*]](footnote.png)
- the statistics that APaGeD prints when compiling the grammar, show whether there were conflicts
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.