require 'parslet' require_relative 'parser/token_parser.rb' require_relative 'parser/keyword_parser.rb' require_relative 'parser/operator_parser.rb' require_relative 'parser/simple_expression_parser' require_relative 'parser/db_query_parser' require_relative 'parser/value_returning_expression_parser' require_relative 'parser/control_statement_parser' require_relative 'parser/routing_expression_parser' require_relative 'parser/void_statement_parser' module Shift class ShiftParser < Parslet::Parser include Shift::Parser rule(:expression) { void_statements | integer_casted_expression | value_returning_expression} root(:expression) end end =begin parser = Shift::ShiftParser.new p parser.parse("123") p parser.parse("123.456") p parser.parse("'abc'") p parser.parse('"def"') p parser.parse('"Hello World"') p parser.parse("test") p parser.parse("data[test]") p parser.parse("data['test']") p parser.parse("data.test") p parser.parse("5+5+5") p parser.parse("5*5") p parser.parse("(5+5)") p parser.parse("(5)") p parser.parse("(5+5)+5") p parser.parse("(5+5)+(5)") p parser.parse("(5+5)*(5-5)") p parser.parse("(5+5)*(5-5)-(2+2)") p parser.parse("(5+5)* (5-5)") p parser.parse("((5 + 5) * (10 - 10))") p parser.parse("((5 + 5) * (10 - 10)) * (5 + 4)") p parser.parse("((5 + 5) * (10 - 10)) * ((5 + 4) * (5+5))") p parser.parse("(((5 + 5) * (10 - 10)) * ((5 + 4) * (5+5)))") p parser.parse("a && b") p parser.parse("a && b || c") p parser.parse("(a && b)") p parser.parse("(a && b) || (c || d)") p parser.parse("(a && b) || (c || d) || (e && f)") p parser.parse("((a && b) || (c || d) || (e && f))") p parser.parse("a == b") p parser.parse("a <= b") p parser.parse("a >= b") p parser.parse("a != b") p parser.parse("a < b") p parser.parse("a > b") p parser.parse("(a == b)") p parser.parse("(a == b) && (c == d)") p parser.parse("(a == b) || (c == d)") p parser.parse("!(c == d)") p parser.parse("!((a == b) || (c == d) && (e == f))") p parser.parse("read abc") p parser.parse("read 'abc'") p parser.parse("read read 'abc'") p parser.parse("all Todo") p parser.parse("new Todo") p parser.parse("update Todo") p parser.parse("delete Todo") p parser.parse("find_by_id Todo data") p parser.parse("find_by_id Todo data['id']") p parser.parse("a = 5") p parser.parse("a = 5 + 10") p parser.parse("a = b") p parser.parse("a = read 'test'") p parser.parse("write 'test'") p parser.parse('write_file "test.html"') p parser.parse("redirect '/'") # NOTE: Control statements do not have parenthesis p parser.parse("if a == b") p parser.parse("if (a == b)") p parser.parse("if ((a == b) && (c == d))") p parser.parse("else") p parser.parse("for todo in todos") p parser.parse("while (a == b)") p parser.parse("while !((a == 'b') && (c == d))") p parser.parse("get") p parser.parse("post") p parser.parse("/") p parser.parse("/todos") p parser.parse("/todos/new") p parser.parse("/todos/:id/") p parser.parse("/todos/:id/edit") p parser.parse("model Todo") p parser.parse("entry string") p parser.parse("priority integer") p parser.parse("int(5)") p parser.parse("int(a)") p parser.parse("'a'+'b' + c") =end