Skip to content

Instantly share code, notes, and snippets.

View aarongough's full-sized avatar

Aaron Gough (He/Him) aarongough

View GitHub Profile
=begin
%%{
machine simple_lexer;
integer = ('+'|'-')?[0-9]+;
float = ('+'|'-')?[0-9]+'.'[0-9]+;
assignment = '=';
identifier = [a-zA-Z][a-zA-Z_]+;
%%{
machine simple_lexer;
integer = ('+'|'-')?[0-9]+;
float = ('+'|'-')?[0-9]+'.'[0-9]+;
assignment = '=';
identifier = [a-zA-Z][a-zA-Z_]+;
main := |*
[{: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