meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
scan_statement [2020/07/24 11:20] – revusky | scan_statement [2021/08/07 08:21] (current) – [The SCAN construct also you to use contextual predicates.] revusky | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== The new SCAN Statement ==== | + | ===== The new SCAN Statement |
- | JavaCC 21 introduces a new '' | + | JavaCC 21 introduces a new '' |
- | Note that all the older syntax still works and will work for the foreseeable feature. Here is a rundown of the differences between '' | + | Note, however, |
+ | Here is a rundown of the differences between '' | ||
==== The parameters of SCAN (assuming there are any) are not enclosed in parentheses. ==== | ==== The parameters of SCAN (assuming there are any) are not enclosed in parentheses. ==== | ||
Line 22: | Line 23: | ||
< | < | ||
- | LOOKAHEAD(Foo()) Foo() Bar() | + | LOOKAHEAD(" |
</ | </ | ||
Line 28: | Line 29: | ||
< | < | ||
- | SCAN Foo => Foo Bar | + | SCAN " |
</ | </ | ||
Line 88: | Line 89: | ||
< | < | ||
- | SCAN 0 {someCondition} Foo | + | SCAN 0 {someCondition} |
</ | </ | ||
- | 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 | + | ==== The SCAN construct allows |
- | 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 156: | 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. | ||