class Noir::PhpLexer

Overview

PhpLexer is a hand-rolled structural lexer for PHP source. It exists to replace the per-analyzer character state machines that every PHP analyzer re-implements (balanced-brace matching, statement-end scanning, string/ comment skip ranges) with a single shared pass that is:

The lexer masks every non-code region (strings, comments, heredoc/nowdoc bodies) into spaces in @masked while preserving newlines and overall length, so the structural helpers below are plain depth counters over @masked with no string-state bookkeeping of their own.

Defined in:

minilexers/php_lexer.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(source : String) #

[View source]

Instance Method Detail

def expression_end(start_pos : Int32) : Int32 #

Index of the first top-level expression terminator (, ; or a closing ) ] } that would pop above the starting level) at or after start_pos. Mirrors find_arrow_expression_end.


[View source]
def in_code?(pos : Int32) : Bool #

[View source]
def masked : Array(Char) #

Code with strings/comments/heredoc bodies blanked to spaces. Same character length as the source; newlines preserved so line/offset math against the original content stays valid.


[View source]
def matching_delimiter(open_pos : Int32) : Int32 | Nil #

Index of the delimiter that closes the (/[/{ at open_pos, or nil. Counts only the matching pair type, which is correct for balanced code and mirrors the engine's find_matching_php_close_brace.


[View source]
def skip_ranges : Array(Range(Int32, Int32)) #

Character ranges occupied by strings, comments and heredoc/nowdoc bodies.


[View source]
def statement_end(start_pos : Int32) : Int32 #

Index just after the top-level ; at or after start_pos, or the source size when none is found. Mirrors find_php_statement_end.


[View source]
def tokens : Array(PhpToken) #

Lazily produce a flat token stream over the source: structural delimiters, ->/::/=> operators, identifiers, $variables, and one token per string/comment/heredoc span. This is the reusable miniparser surface for consumers that want to walk PHP structurally (e.g. following a Route::a(...)->b(...)->group(...) method chain).


[View source]