class

Dragonstone::Parser

Inherits Reference < Object

Constants

ASSIGNMENT_TOKENS = [:ASSIGN, :PLUS_ASSIGN, :MINUS_ASSIGN, :MULTIPLY_ASSIGN, :DIVIDE_ASSIGN, :MODULO_ASSIGN, :POWER_ASSIGN, :FLOOR_DIVIDE_ASSIGN, :WRAP_PLUS_ASSIGN, :WRAP_MINUS_ASSIGN, :WRAP_MULTIPLY_ASSIGN, :WRAP_POWER_ASSIGN, :BIT_AND_ASSIGN, :BIT_OR_ASSIGN, :BIT_XOR_ASSIGN, :SHIFT_LEFT_ASSIGN, :SHIFT_RIGHT_ASSIGN, :LOGICAL_OR_ASSIGN, :LOGICAL_AND_ASSIGN]
METHOD_NAME_KEYWORDS = [:SELECT, :BEGIN]
OPERATOR_PRECEDENCE = {:** => PRECEDENCE[:exponential], :&** => PRECEDENCE[:exponential], :* => PRECEDENCE[:multiplicative], :/ => PRECEDENCE[:multiplicative], :// => PRECEDENCE[:multiplicative], :% => PRECEDENCE[:multiplicative], :&* => PRECEDENCE[:multiplicative], :+ => PRECEDENCE[:additive], :&+ => PRECEDENCE[:additive], :- => PRECEDENCE[:additive], :&- => PRECEDENCE[:additive], :<< => PRECEDENCE[:shift], :>> => PRECEDENCE[:shift], :& => PRECEDENCE[:binary_and], :| => PRECEDENCE[:binary_or], :^ => PRECEDENCE[:binary_or], :== => PRECEDENCE[:equality], :!= => PRECEDENCE[:equality], :=~ => PRECEDENCE[:equality], :!~ => PRECEDENCE[:equality], :=== => PRECEDENCE[:equality], :< => PRECEDENCE[:comparison], :<= => PRECEDENCE[:comparison], :> => PRECEDENCE[:comparison], :>= => PRECEDENCE[:comparison], :<=> => PRECEDENCE[:comparison], :"&&" => PRECEDENCE[:logical_and], :"||" => PRECEDENCE[:logical_or], :".." => PRECEDENCE[:range], :"..." => PRECEDENCE[:range]}
OVERLOADABLE_OPERATORS = [:PLUS, :MINUS, :MULTIPLY, :DIVIDE, :FLOOR_DIVIDE, :MODULO, :POWER, :WRAP_PLUS, :WRAP_MINUS, :WRAP_MULTIPLY, :WRAP_POWER, :SHIFT_LEFT, :SHIFT_RIGHT, :BIT_AND, :BIT_OR, :BIT_XOR, :BIT_NOT, :EQUALS, :NOT_EQUALS, :LESS, :LESS_EQUAL, :GREATER, :GREATER_EQUAL, :SPACESHIP, :CASE_EQUALS]
PRECEDENCE = { assignment: 10, conditional: 20, range: 30, logical_or: 40, logical_and: 50, equality: 60, comparison: 70, binary_or: 80, binary_and: 90, shift: 100, additive: 110, multiplicative: 120, exponential: 130, }
RIGHT_ASSOCIATIVE = [:**, :&**, :"..", :"..."]
TERMINATOR_TOKENS = [:EOF, :END, :ELSIF, :ELSE, :WHEN, :RESCUE, :ENSURE, :RETURN, :QUIT, :BREAK, :NEXT, :REDO, :RETRY, :RAISE, :ABORT, :CON, :VAR, :LET, :FIX, :ABSTRACT, :DEF, :CLASS, :MODULE, :CASE, :SELECT, :IF, :UNLESS, :WHILE, :PUTS, :ECHO, :EECHO, :DEBUG_ECHO, :DEBUG_EECHO]
TOKEN_OPERATOR_MAP = { PLUS: :+, MINUS: :-, WRAP_PLUS: :&+, WRAP_MINUS: :&-, MULTIPLY: :*, WRAP_MULTIPLY: :&*, DIVIDE: :/, FLOOR_DIVIDE: ://, MODULO: :%, POWER: :**, WRAP_POWER: :&**, SHIFT_LEFT: :<<, SHIFT_RIGHT: :>>, BIT_AND: :&, BIT_OR: :|, BIT_XOR: :^, EQUALS: :==, NOT_EQUALS: :!=, LESS: :<, LESS_EQUAL: :<=, GREATER: :>, GREATER_EQUAL: :>=, SPACESHIP: :<=>, MATCH: :=~, NOT_MATCH: :!~, CASE_EQUALS: :===, LOGICAL_AND: :"&&", LOGICAL_OR: :"||", RANGE_INCLUSIVE: :"..", RANGE_EXCLUSIVE: :"...", BIT_AND_ASSIGN: :&, BIT_OR_ASSIGN: :|, BIT_XOR_ASSIGN: :^, LOGICAL_AND_ASSIGN: :"&&", LOGICAL_OR_ASSIGN: :"||", SHIFT_LEFT_ASSIGN: :<<, SHIFT_RIGHT_ASSIGN: :>>, PLUS_ASSIGN: :+, MINUS_ASSIGN: :-, MULTIPLY_ASSIGN: :*, DIVIDE_ASSIGN: :/, FLOOR_DIVIDE_ASSIGN: ://, MODULO_ASSIGN: :%, POWER_ASSIGN: :**, WRAP_PLUS_ASSIGN: :&+, WRAP_MINUS_ASSIGN: :&-, WRAP_MULTIPLY_ASSIGN: :&*, WRAP_POWER_ASSIGN: :&**, }

Constructors

new(tokens : Array(Token))
Source

Class methods

parse(source : String, source_name : String = "<source>") : AST::Program
Source

Instance methods

parse
Source
parse_expression_entry
Source
parse_memory_annotation(tokens : Array(Token)) : AST::Annotation::MemoryAnnotation
Source