meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
scan_statement [2020/07/24 11:23] – [The parameters of SCAN (assuming there are more than one) are not separated by a comma.] revusky | scan_statement [2021/02/08 18:16] – revusky | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== The new SCAN Statement ==== | + | ===== The new SCAN Statement |
- | JavaCC 21 introduces a new '' | + | JavaCC 21 introduces a new '' |
- | + | ||
- | Note, however, that all the older syntax still works and will work for the foreseeable feature. | + | |
+ | Note, however, that the older '' | ||
Here is a rundown of the differences between '' | Here is a rundown of the differences between '' | ||
Line 24: | Line 23: | ||
< | < | ||
- | LOOKAHEAD(Foo()) Foo() Bar() | + | LOOKAHEAD(" |
</ | </ | ||
Line 30: | Line 29: | ||
< | < | ||
- | SCAN Foo => Foo Bar | + | SCAN " |
</ | </ | ||
Line 94: | Line 93: | ||
- | In the legacy lookahead, if you only have semantic lookahead, the number of tokens to be scanned is assumed to be zero, i.e. if the condition is true, you automatically go into the following expansion. | + | In the legacy lookahead, if you only have semantic lookahead, the number of tokens to be scanned is assumed to be zero, i.e. if the condition is true, you automatically go into the following expansion. JavaCC 21 makes the opposite assumption in these spots. Unless you specify otherwise, we assume // |
- | ==== The SCAN construct also allows the newer LOOKBEHIND construct. ==== | + | ==== The SCAN construct also you to use contextual predicates. ==== |
- | This is outlined separately. | + | The [[contextual_predicates]] construct allows you to express conditions based on scanning backwards in the lookahead/ |
+ | |||
+ | You can find more information [[contextual_predicates|here]]. | ||
==== Addendum: the SCAN-less SCAN? ==== | ==== Addendum: the SCAN-less SCAN? ==== | ||
Line 158: | Line 159: | ||
</ | </ | ||
- | In this case, because I think it is so common, we decided to allow this. And, in fact, you can see that this is already used in internal development, | + | In this case, because I think it is so common, we decided to allow this. And, in fact, you can see that this is already used in internal development, |
+ | |||
+ | |||
+ | ==== Recap ==== | ||
+ | |||
+ | The new '' | ||
+ | * // | ||
+ | * [[semantic lookahead]], | ||
+ | * a [[contextual_predicates]] predicate | ||
+ | * [[syntactic lookahead]] | ||
+ | |||
+ | Caveats: | ||
+ | * The '' | ||
+ | * If no numerical or syntactic lookahead is specified, the generated code will scan ahead an // | ||
+ | |||
+ | Note that an empty SCAN statement can be simply written alternatively with a lone arrow, i.e. '' | ||
- | ===== The newer SCAN construct allows you to use the newer " | ||
- | This is documented separately. | ||