Skip to content

Instantly share code, notes, and snippets.

View aarongough's full-sized avatar

Aaron Gough (He/Him) aarongough

View GitHub Profile
[{:name => :integer_literal, :value => "-101" }]
%%{
machine test_lexer;
integer = ('+'|'-')?[0-9]+;
main := |*
integer => {
emit(:integer_literal, data, token_array, ts, te)
};
def emit(token_name, data, target_array, ts, te)
target_array << {:name => token_name.to_sym, :value => data[ts...te].pack("c*") }
end
%%{
machine test_lexer;
integer = ('+'|'-')?[0-9]+;
main := |*
integer => { puts "Integer: " + data[ts..te].pack("c*") };
*|;
%%{
machine test_lexer;
integer = ('+'|'-')?[0-9]+;
main := |*
integer => { puts "Integer" };
*|;
%%{
machine test_lexer;
integer = ('+'|'-')?[0-9]+;
main := |*
integer;
*|;
%%{
machine test_lexer;
integer = ('+'|'-')?[0-9]+;
}%%
def run_lexer(data)
data = data.unpack("c*") if(data.is_a?(String))
eof = data.length
token_array = []
%% write init;
%% write exec;
puts token_array.inspect
end
%%{
machine test_lexer;
integer = <token_description>;
float = <token_description>;
main := |*
integer => {<action>};
float => {<action>};