Skip to content

Instantly share code, notes, and snippets.

@zeitnot
Last active December 27, 2018 07:58
Show Gist options
  • Save zeitnot/3137ddffcb719a61a96bd9046cac1a57 to your computer and use it in GitHub Desktop.
Save zeitnot/3137ddffcb719a61a96bd9046cac1a57 to your computer and use it in GitHub Desktop.
Ruby syntax checker
require "test/unit"
def syntax_checker(str)
opening_tags = ['[', '(', '<', '{']
closing_tags = [']', ')', '>', '}']
set = []
str.chars.each do |char|
if opening_tags.include?(char)
set << char
elsif closing_tags.include?(char)
if closing_tags.index(char) == opening_tags.index(set.last)
set.pop
else
return false
end
end
end
set.empty?
end
class TestSyntax < Test::Unit::TestCase
def test_sytax_checker
assert_equal(true, syntax_checker('<ali> <veli>'))
assert_equal(true, syntax_checker('<{<[([({ test })])]>}>'))
assert_equal(true, syntax_checker('( 2 + 1) + (4 + 1)'))
assert_equal(false, syntax_checker('<{<[([({ test ))])]>}>'))
assert_equal(false, syntax_checker('<div '))
end
end
@zeitnot
Copy link
Author

zeitnot commented Nov 11, 2018

usage:

syntax_checker('<ali> <veli>') => true 
syntax_checker('<div ') => false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment