require ‘adsl/parser/ast_nodes’
class ADSL::Parser::ADSLParser
macro rule
\/\/[^\n\z]* # comment, no action \#[^\n\z]* # comment, no action \/\*(?:[^\*]*(?:\*+[^\/]+)?)*\*\/ # comment, no action class\b { [:class, lineno] } extends\b { [:extends, lineno] } inverseof\b { [:inverseof, lineno] } create\b { [:create, lineno] } delete\b { [:delete, lineno] } foreach\b { [:foreach, lineno] } either\b { [:either, lineno] } action\b { [:action, lineno] } or\b { [:or, lineno] } subset\b { [:subset, lineno] } oneof\b { [:oneof, lineno] } allof\b { [:allof, lineno] } forall\b { [:forall, lineno] } exists\b { [:exists, lineno] } in\b { [:in, lineno] } invariant\b { [:invariant, lineno] } true\b { [:true, lineno] } false\b { [:false, lineno] } != { [text, lineno] } !|not\b { [:not, lineno] } and\b { [:and, lineno] } equal\b { [:equal, lineno] } equiv\b { [:equiv, lineno] } empty\b { [:empty, lineno] } implies\b { [:implies, lineno] } \.\. { [text, lineno] } [{}:\(\)\.,] { [text, lineno] } \+= { [text, lineno] } \-= { [text, lineno] } == { [text, lineno] } <=> { [text, lineno] } <= { [text, lineno] } => { [text, lineno] } = { [text, lineno] } \+ { [text, lineno] } [01] { [text, lineno] } \w+ { [:IDENT, ADSL::Parser::ASTIdent.new(:lineno => lineno, :text => text)] } \s # blank, no action . { [:unknown_symbol, [text, lineno]] }
end