filipinomemes 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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