filipinomemes 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +602 -0
  8. data/Rakefile +6 -0
  9. data/_config.yml +1 -0
  10. data/bin/filipinomemes +21 -0
  11. data/filipinomemes.gemspec +26 -0
  12. data/lib/filipinomemes.rb +3 -0
  13. data/lib/filipinomemes/compiler.rb +21 -0
  14. data/lib/filipinomemes/core_ext.rb +8 -0
  15. data/lib/filipinomemes/core_ext/array.rb +19 -0
  16. data/lib/filipinomemes/core_ext/class.rb +4 -0
  17. data/lib/filipinomemes/core_ext/enumerator.rb +3 -0
  18. data/lib/filipinomemes/core_ext/integer.rb +4 -0
  19. data/lib/filipinomemes/core_ext/kernel.rb +13 -0
  20. data/lib/filipinomemes/core_ext/module.rb +4 -0
  21. data/lib/filipinomemes/core_ext/range.rb +6 -0
  22. data/lib/filipinomemes/core_ext/string.rb +13 -0
  23. data/lib/filipinomemes/ruby_parser_patches.rb +156 -0
  24. data/lib/filipinomemes/version.rb +3 -0
  25. data/sample_programs/agapan.bt +5 -0
  26. data/sample_programs/alyas.bt +9 -0
  27. data/sample_programs/batotris.bt +286 -0
  28. data/sample_programs/bilang.bt +10 -0
  29. data/sample_programs/dapat.bt +9 -0
  30. data/sample_programs/habang.bt +7 -0
  31. data/sample_programs/ihinto.bt +8 -0
  32. data/sample_programs/kontrol-sa-pagiikot.bt +45 -0
  33. data/sample_programs/kumusta_mundo.bt +5 -0
  34. data/sample_programs/magbibigay.bt +27 -0
  35. data/sample_programs/maliban_na.bt +12 -0
  36. data/sample_programs/modyul.bt +20 -0
  37. data/sample_programs/nakatukoy.bt +13 -0
  38. data/sample_programs/ngunit_kapag.bt +8 -0
  39. data/sample_programs/o_ang.bt +3 -0
  40. data/sample_programs/pamamaraan-sa-pagkakamali.bt +11 -0
  41. data/sample_programs/pangalan.bt +10 -0
  42. data/sample_programs/panguri.bt +13 -0
  43. data/sample_programs/panuntunan.bt +23 -0
  44. data/sample_programs/para_sa.bt +4 -0
  45. data/sample_programs/pibonasyi.bt +59 -0
  46. data/sample_programs/siguraduhin.bt +8 -0
  47. data/sample_programs/tanggalin.bt +23 -0
  48. data/sample_programs/timebomb.bt +36 -0
  49. data/spec/filipinomemes/compiler_spec.rb +116 -0
  50. data/spec/spec_helper.rb +61 -0
  51. metadata +152 -0
@@ -0,0 +1,10 @@
1
+ grupo Tinapay
2
+ bilang Donut
3
+ ang flavor
4
+ mag_print 'Strawberry!'
5
+ finish_na
6
+ finish_na
7
+ finish_na
8
+
9
+ tinapay = Tinapay::Donut.gumawa
10
+ tinapay.flavor
@@ -0,0 +1,9 @@
1
+ panulat_mo = "lapis"
2
+
3
+ papel = hakdog panulat_mo
4
+ ay "lapis" dapat "bond paper"
5
+ ay "ballpen" dapat "dilaw na papel"
6
+ ginagawa_mue "intermediate paper"
7
+ finish_na
8
+
9
+ mag_print "Ang papel na gagamitin mo ay #{papel}"
@@ -0,0 +1,7 @@
1
+ may_buhay = istroo
2
+
3
+ ako_magisip may_buhay
4
+ mag_print 'may pag-asa!'
5
+
6
+ auko_na
7
+ finish_na
@@ -0,0 +1,8 @@
1
+ nakamit = mali
2
+
3
+ ako_magisip nakamit == mali
4
+ mag_print 'hindi pa nakakamit!'
5
+ auko_na
6
+ finish_na
7
+
8
+ mag_print 'nakamit na!'
@@ -0,0 +1,45 @@
1
+ # isaisahin loop
2
+ ['a','b','c','d'].isaisahin adbans |titik|
3
+ mag_print "Ang titik ay #{titik}"
4
+ finish_na
5
+
6
+ # isaisahin loop on range
7
+ (1..10).isaisahin adbans |numero|
8
+ mag_print "Ang numero ay #{numero}"
9
+ finish_na
10
+
11
+ # while loop
12
+ numero = 1
13
+ ako_magisip numero < 10 adbans
14
+ mag_print "Ang numero ay #{numero} na"
15
+ numero += 1
16
+ finish_na
17
+
18
+ # begin while
19
+ numero = 0
20
+ panghuling_numero = 5
21
+ glhf
22
+ mag_print "Ang numero ay #{numero} na"
23
+ numero += 1
24
+ finish_na ako_magisip numero < panghuling_numero
25
+
26
+ # until
27
+ numero = 0
28
+ panghuling_numero = 5
29
+ hanggang numero > panghuling_numero adbans
30
+ mag_print "Ang numero ay #{numero} na"
31
+ numero += 1
32
+ finish_na
33
+
34
+ # begin until
35
+ numero = 0
36
+ panghuling_numero = 5
37
+ glhf
38
+ mag_print "Ang numero ay #{numero} na"
39
+ numero += 1
40
+ finish_na hanggang numero < panghuling_numero
41
+
42
+ # for loop
43
+ para_ang numero na_nasa 0..5
44
+ mag_print "Ang numero ay #{numero} na"
45
+ finish_na
@@ -0,0 +1,5 @@
1
+ ip 1 > 0
2
+ mag_print "Kumusta mundo!"
3
+ ginagawa_mue
4
+ mag_print "Mayroong sira"
5
+ finish_na
@@ -0,0 +1,27 @@
1
+ ang gumawaNgID
2
+ mag_print "------------------------------------------"
3
+
4
+ magbigay_daan
5
+
6
+ mag_print "------------------------------------------"
7
+ finish_na
8
+
9
+ ang ID(impormasyon = {})
10
+ gumawaNgID adbans
11
+ mag_print <<-FINISH_NA
12
+ Pangalan: #{impormasyon[:pangalan]}
13
+ Edad: #{impormasyon[:edad]}
14
+ Tirahan: #{impormasyon[:tirahan]}
15
+ Baitang: #{impormasyon[:baitang]}
16
+ Seksiyon: #{impormasyon[:seksiyon]}
17
+ FINISH_NA
18
+ finish_na
19
+ finish_na
20
+
21
+ ID({
22
+ pangalan: "Maliksi Batubalani",
23
+ edad: "13",
24
+ tirahan: "Ilocos",
25
+ baitang: "6",
26
+ seksiyon: "Masisipag"
27
+ })
@@ -0,0 +1,12 @@
1
+ mga_persona = [
2
+ { pangalan: 'Gener', kasarian: 'lalaki' },
3
+ { pangalan: 'Karmen', kasarian: 'babae' }
4
+ ]
5
+
6
+ mga_persona.isaisahin adbans |tao|
7
+ malibang tao[:kasarian] == 'lalaki'
8
+ mag_print "si #{tao[:pangalan]} ay babae!"
9
+ ginagawa_mue
10
+ mag_print "si #{tao[:pangalan]} ay lalaki!"
11
+ finish_na
12
+ finish_na
@@ -0,0 +1,20 @@
1
+ grupo MgaAlagangHayop
2
+ KAILANGAN_DAMI_NG_ASO = 5
3
+ bilang Aso
4
+ ang tahol
5
+ mag_print "Woof..."
6
+ finish_na
7
+
8
+ ang kumanin
9
+ mag_print "..."
10
+ finish_na
11
+
12
+ ang ikembot_ang_buntot
13
+ mag_print "Ginagawa ko ito dahil masaya ako!"
14
+ finish_na
15
+ finish_na
16
+ finish_na
17
+
18
+ dami = 6
19
+ browny = MgaAlagangHayop::Aso.gumawa
20
+ browny.ikembot_ang_buntot ip dami >= MgaAlagangHayop::KAILANGAN_DAMI_NG_ASO
@@ -0,0 +1,13 @@
1
+ grupo Manggagawa
2
+ bilang Magsasaka
3
+ ang pananim
4
+ ['sibuyas', 'kamatis', 'sili', 'palay', 'mais'].isaisahin adbans |pananim|
5
+ mag_print "Mag tatanim ng #{pananim} ngayong panahon"
6
+ finish_na
7
+ finish_na
8
+ finish_na
9
+ finish_na
10
+
11
+ kung nakatukoy?(Manggagawa::Magsasaka)
12
+ mag_print 'May nakatukoy!'
13
+ finish_na
@@ -0,0 +1,8 @@
1
+ pangalan_mo = "Masipag"
2
+ agik pangalan_mo == "Matipuno"
3
+ mag_print "Ikaw ay si Matipuno!"
4
+ agik_ginagawa_mue pangalan_mo == "Masipag"
5
+ mag_print "Ikaw ay si Masipag!"
6
+ ginagawa_mue
7
+ mag_print "Wala kang rekord dito!"
8
+ finish_na
@@ -0,0 +1,3 @@
1
+ ip (istroo o mali)
2
+ mag_print 'istroo'
3
+ finish_na
@@ -0,0 +1,11 @@
1
+ bilang_ng_pagkakamali = 0
2
+ glhf
3
+ # mag komento ip hindi sigurado
4
+ 1 / 0
5
+ agapan => pagkakamali
6
+ bilang_ng_pagkakamali += 1
7
+ neba_gibap ip bilang_ng_pagkakamali < 3
8
+ iangat "malubhang pagkakamali"
9
+ siguraduhing
10
+ mag_print "Tapos na"
11
+ finish_na
@@ -0,0 +1,10 @@
1
+ ang iprintAngPangalan(pangalan = wala)
2
+ ip pangalan != wala
3
+ mag_print "Magandang araw sa iyo #{pangalan}!"
4
+ ginagawa_mue
5
+ mag_print "Magandang araw!"
6
+ finish_na
7
+ finish_na
8
+
9
+ iprintAngPangalan "Maria" # => "Magandang araw sa iyo Maria!"
10
+ iprintAngPangalan # => "Magandang araw!"
@@ -0,0 +1,13 @@
1
+ bilang Pangalan
2
+ panguri :pangalan
3
+
4
+ ang initialize(pangalan)
5
+ @pangalan = pangalan
6
+ finish_na
7
+
8
+ ang ipakitaAngPangalan
9
+ mag_print mayselp.pangalan
10
+ finish_na
11
+ finish_na
12
+
13
+ Pangalan.gumawa('Joel').ipakitaAngPangalan
@@ -0,0 +1,23 @@
1
+ ang gumawaNgID(estudyante = {})
2
+ pangalan = estudyante[:pangalan]
3
+ edad = estudyante[:edad]
4
+ tirahan = estudyante[:tirahan]
5
+ baitang = estudyante[:baitang]
6
+ seksiyon = estudyante[:seksiyon]
7
+
8
+ mag_print <<-FINISH_NA
9
+ Pangalan: #{pangalan}
10
+ Edad: #{edad}
11
+ Tirahan: #{tirahan}
12
+ Baitang: #{baitang}
13
+ Seksiyon: #{seksiyon}
14
+ FINISH_NA
15
+ finish_na
16
+
17
+ gumawaNgID({
18
+ pangalan: "Maliksi Batubalani",
19
+ edad: "13",
20
+ tirahan: "Ilocos",
21
+ baitang: "6",
22
+ seksiyon: "Masisipag"
23
+ })
@@ -0,0 +1,4 @@
1
+ listahan_ng_mga_prutas = ["mansanas", "mangga", "guava", "santol", "ubas"]
2
+ para_sa prutas na_nasa listahan_ng_mga_prutas adbans
3
+ mag_print prutas.sa_malaking_titik
4
+ finish_na
@@ -0,0 +1,59 @@
1
+ ang pibonasyi(n, n1 = 1, n2 = 1)
2
+ ip n <= 2
3
+ [0, n1, n2][n]
4
+ ginagawa_mue
5
+ sagot = wala
6
+ (n-2).ulit adbans
7
+ sagot = n1 + n2
8
+ n1 = n2
9
+ n2 = sagot
10
+ finish_na
11
+ sagot
12
+ finish_na
13
+ finish_na
14
+
15
+ ang pibonasyingPagsuksok(n, n1 = 1, n2 = 1)
16
+ ip n <= 2
17
+ [0, n1, n2][n]
18
+ ginagawa_mue
19
+ ([wala].umikot.kumuha(n-2).ipasok([n1, n2]) adbans |nakaraan, x|
20
+ nakaraan.magbagsak(1).itulak(nakaraan[0] + nakaraan[1])
21
+ finish_na).huli
22
+ finish_na
23
+ finish_na
24
+
25
+ ang pibonasyingInuulit(n, n1 = 1, n2 = 1)
26
+ ip n <= 2
27
+ binhi = [0, n1, n2]
28
+ binhi[n]
29
+ ginagawa_mue
30
+ pibonasyingInuulit(n-1, n1, n2) + pibonasyingInuulit(n-2, n1, n2)
31
+ finish_na
32
+ finish_na
33
+
34
+ ang pibonasyingBuntutangInuulit(n, n1 = 1, n2 = 1)
35
+ magbalik n1 ip n <= 1
36
+ magbalik n2 ip n == 2
37
+ magbalik pibonasyi(n - 1, n2, n1 + n2)
38
+ finish_na
39
+
40
+ ang pibonasyingPaguulit(n, n1 = 1, n2 = 1)
41
+ (2..n).sa_bawat_isa {
42
+ n1, n2 = n2, n1 + n2
43
+ }
44
+ magbalik n1
45
+ finish_na
46
+
47
+ ang pibonasyingPaguulitNaUmiikot(n, n1 = 1, n2 = 1)
48
+ para_sa i sa 2..n
49
+ n1, n2 = n2, n1 + n2
50
+ finish_na
51
+ magbalik n1
52
+ finish_na
53
+
54
+ mag_print "Gamit ang Panuntunang Pibonasyi sa 10 ay #{pibonasyi 10}"
55
+ mag_print "Gamit ang Panuntunang Pibonasying May Pagsuksok sa 9 ay #{pibonasyingPagsuksok 9}"
56
+ mag_print "Gamit ang Panuntunang Pibonasying Inuulit sa 8 ay #{pibonasyingInuulit 8}"
57
+ mag_print "Gamit ang Panuntunang Pibonasying May Buntot na Inuulit sa 7 ay #{pibonasyingBuntutangInuulit 7}"
58
+ mag_print "Gamit ang Panuntunang Pibonasying Paguulit sa 6 ay #{pibonasyingPaguulit 6}"
59
+ mag_print "Gamit ang Panuntunang Pibonasying Paguulit na Umiikot sa 5 ay #{pibonasyingPaguulitNaUmiikot 5}"
@@ -0,0 +1,8 @@
1
+ wala_na
2
+ itaas "Chismosa!"
3
+ agapan
4
+ mag_print "Balik sa trabaho!"
5
+ itaas "May kaguluhan!"
6
+ siguraduhing
7
+ mag_print "Walang kakain kung hindi tapos!"
8
+ finish_na
@@ -0,0 +1,23 @@
1
+ grupo Hayop
2
+ bilang Aso
3
+ ang tahol
4
+ mag_print 'baw waw!'
5
+ finish_na
6
+ finish_na
7
+ finish_na
8
+
9
+ bilang Pusa < Hayop::Aso
10
+ tanggalin tahol
11
+
12
+ ang meow
13
+ mag_print 'meow wahu!'
14
+ finish_na
15
+ finish_na
16
+
17
+ pusa = Pusa.kumatawan
18
+
19
+ wala_na
20
+ pusa.tahol
21
+ agapan => pagkakamali
22
+ mag_print "ang pagkakamali ay '#{pagkakamali}'"
23
+ finish_na
@@ -0,0 +1,36 @@
1
+ # Filipinomemes Programming Language (https://github.com/zephyrum14/filipinomemes)
2
+
3
+ grupo TimeBomb
4
+ BILANG = 5
5
+ bilang Bomba
6
+ ang tik
7
+ mag_print 'tik'
8
+ finish_na
9
+
10
+ ang tok
11
+ mag_print 'tok'
12
+ finish_na
13
+
14
+ ang sabog
15
+ mag_print 'kaboom!'
16
+ finish_na
17
+ finish_na
18
+ finish_na
19
+
20
+ pasabog = TimeBomb::Bomba.gumawa
21
+
22
+ numero = 1
23
+ ako_magisip numero <= TimeBomb::BILANG adbans
24
+ mag_print "#{numero}"
25
+
26
+ ip (numero == TimeBomb::BILANG)
27
+ pasabog.sabog
28
+ agik_ginagawa_mue (numero % 2) != 0
29
+ pasabog.tik
30
+ agik_ginagawa_mue (numero % 2) == 0
31
+ pasabog.tok
32
+ finish_na
33
+
34
+ matulog 1
35
+ numero += 1
36
+ finish_na
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ isalaysay_ang 'Compiler' do
4
+ italaga_ang(:starting_code) do
5
+ "# encoding: utf-8\nrequire \"filipinomemes/core_ext\"\n"
6
+ end
7
+
8
+ italaga_ang(:compiler) do
9
+ Filipinomemes::Compiler.new
10
+ end
11
+
12
+ ito_ang 'Filipinomemes is empty' do
13
+ compiler.zephyrum('').should == starting_code + ''
14
+ end
15
+
16
+ isalaysay_ang 'bilang' do
17
+ ito_ang 'pambuong bilang' do
18
+ compiler.zephyrum('1').should == starting_code + '1'
19
+ end
20
+
21
+ ito_ang 'maliliit na bilang' do
22
+ compiler.zephyrum('1.2').should == starting_code + '1.2'
23
+ end
24
+
25
+ ito_ang 'listahan ng mga bilang' do
26
+ compiler.zephyrum('[1.2, 3]').should == starting_code + '[1.2, 3]'
27
+ end
28
+ end
29
+
30
+ isalaysay_ang 'ekspresyong Boolean' do
31
+ ito_ang 'ekspresyon ng truts o true' do
32
+ compiler.zephyrum('truts').should == starting_code + 'true'
33
+ end
34
+
35
+ ito_ang 'ekspresyon ng mali o false' do
36
+ compiler.zephyrum('mali').should == starting_code + 'false'
37
+ end
38
+
39
+ ito_ang 'ekspresyon ng hindi o not' do
40
+ compiler.zephyrum('hindi truts').should == starting_code + '(not true)'
41
+ end
42
+ end
43
+
44
+ isalaysay_ang 'susing mga salita' do
45
+ ito_ang 'ekspresyon ng agik / dapat / agik_ginagawa_mue / ginagawa_mue / finish_na' do
46
+ compiler.zephyrum('
47
+ agik 1 dapat
48
+ 2
49
+ agik_ginagawa_mue 3
50
+ 4
51
+ ginagawa_mue
52
+ 5
53
+ finish_na').should be_like(starting_code +
54
+ '1 ? (2) : (3 ? (4) : (5))')
55
+ end
56
+
57
+ ito_ang 'ekspresyon ng hakdog / pagka / dapat / ginagawa_mue / finish_na' do
58
+ compiler.zephyrum("
59
+ hakdog 1
60
+ pagka 1 dapat 1
61
+ pagka 2
62
+ 2
63
+ ginagawa_mue
64
+ 3
65
+ finish_na").should be_like(starting_code +
66
+ 'case 1
67
+ when 1 then
68
+ 1
69
+ when 2 then
70
+ 2
71
+ else
72
+ 3
73
+ end')
74
+ end
75
+
76
+ ito_ang 'glhf / iligtas / iangat / siguraduhing / finish_na' do
77
+ # raise ir Kernel metode nevis atslēgvārds
78
+ compiler.zephyrum('
79
+ glhf
80
+ 1 / 0
81
+ iligtas => pagkakamali
82
+ neba_gibap
83
+ iangat pagkakamali, pagkakamali.iulat
84
+ siguraduhing
85
+ mag_print "Katapusan"
86
+ finish_na').should be_like(starting_code +
87
+ 'begin
88
+ (1 / 0)
89
+ rescue => pagkakamali
90
+ retry
91
+ iangat(pagkakamali, pagkakamali.iulat)
92
+ ensure
93
+ mag_print("Katapusan")
94
+ end')
95
+ end
96
+ end
97
+
98
+ isalaysay_ang 'pamamaraan sa Kernel' do
99
+ ito_ang "ekspresyon ng pagsusulat gamit ang 'mag_print'" do
100
+ compiler.zephyrum("mag_print 'abc'").should ==
101
+ starting_code + 'mag_print("abc")'
102
+ end
103
+ end
104
+
105
+ isalaysay_ang 'Dinikit na mga pamamaraan' do
106
+ ito_ang 'ekspresyon ng pamamaraan sa pagbabaliktad ng mga titik' do
107
+ resulta = eval compiler.zephyrum("'magandang araw'.baliktad")
108
+ resulta.should == 'wara gnadnagam'
109
+ end
110
+
111
+ ito_ang 'ekspresayon ng pamamaraan sa pagsukat ng haba ng salita' do
112
+ resulta = eval compiler.zephyrum("'Pangungusap'.haba")
113
+ resulta.should == 11
114
+ end
115
+ end
116
+ end