Skip to content

feat: add PST_* flags and DolbraceState machine#325

Merged
ldayton merged 2 commits intomainfrom
lexer-phase9-pst-flags
Jan 17, 2026
Merged

feat: add PST_* flags and DolbraceState machine#325
ldayton merged 2 commits intomainfrom
lexer-phase9-pst-flags

Conversation

@ldayton
Copy link
Copy Markdown
Owner

@ldayton ldayton commented Jan 17, 2026

Summary

  • Add PST_* flag usage to 7 parsing functions for context-sensitive parsing
  • Implement DolbraceState machine for ${...} parameter expansion parsing

PST_* Flags Added

Flag Function
PST_CMDSUBST _parse_command_substitution()
PST_CASESTMT parse_case()
PST_CONDEXPR parse_conditional_expr()
PST_COMPASSIGN _parse_array_literal()
PST_HEREDOC _parse_heredoc()
PST_SUBSHELL parse_subshell()
PST_REGEXP _parse_cond_regex_word()

DolbraceState Machine

Tracks parsing state within ${...} expansions based on bash's DOLBRACE_* defines:

  • PARAM - Reading parameter name
  • OP - Reading operator
  • WORD - Reading word after operator
  • QUOTE - Single quotes special (after %#^, operators)
  • QUOTE2 - Single quotes semi-special (after / operator)

State transitions enable future context-sensitive quote handling improvements.

Set parser state flags during parsing of command substitutions,
case statements, conditional expressions, array literals, heredocs,
subshells, and regex patterns.
Track parsing state within parameter expansions to enable future
context-sensitive quote handling. States include PARAM, OP, WORD,
QUOTE, and QUOTE2 based on bash's DOLBRACE_* defines.

State transitions occur when operators are encountered:
- %#^, operators -> QUOTE state (single quotes special)
- / operator -> QUOTE2 state (semi-special)
- Other operators -> OP then WORD state
@ldayton ldayton merged commit 5707efb into main Jan 17, 2026
1 check passed
@ldayton ldayton deleted the lexer-phase9-pst-flags branch January 17, 2026 09:51
ldayton added a commit that referenced this pull request Mar 25, 2026
Includes fixes for JS backend: constructor defaults (#321), startswith
pos arg (#324), operator precedence (#333), regex escaping (#322),
template literal backticks (#323), destructuring discard (#326),
isinstance primitives (#325, #327), backtick-heredoc (#352), and
UTF-8 encoding (#334).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant