fix(generate): return error when single state transitions have
indirectly recursive cycles.
This can cause infinite loops in the parser near EOF.
Co-authored-by: Amaan Qureshi <amaanq12@gmail.com>
(cherry picked from commit 310c0b86a7)
This commit is contained in:
parent
8e2b5ad2a4
commit
14c4d2f8ca
3 changed files with 114 additions and 1 deletions
1
test/fixtures/test_grammars/indirect_recursion_in_transitions/expected_error.txt
vendored
Normal file
1
test/fixtures/test_grammars/indirect_recursion_in_transitions/expected_error.txt
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
Grammar contains an indirectly recursive rule: type_expression -> _expression -> identifier_expression -> type_expression
|
||||
16
test/fixtures/test_grammars/indirect_recursion_in_transitions/grammar.js
vendored
Normal file
16
test/fixtures/test_grammars/indirect_recursion_in_transitions/grammar.js
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
module.exports = grammar({
|
||||
name: 'indirect_recursive_in_single_symbol_transitions',
|
||||
rules: {
|
||||
source_file: $ => repeat($._statement),
|
||||
|
||||
_statement: $ => seq($.initialization_part, $.type_expression),
|
||||
|
||||
type_expression: $ => choice('int', $._expression),
|
||||
|
||||
initialization_part: $ => seq('=', $._expression),
|
||||
|
||||
_expression: $ => choice($.identifier_expression, $.type_expression),
|
||||
|
||||
identifier_expression: $ => choice(/[a-zA-Z_][a-zA-Z0-9_]*/, $.type_expression),
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue