Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
170 lines (150 sloc) 7.94 KB
# (C) முத்தையா அண்ணாமலை 2016
# இது ஒரு எழில் தமிழ் நிரலாக்க மொழி உதாரணம்
# Brain F* - மூளை குளம்பி மொழி இயக்கியை எழில் மொழியில் வடிவமைப்பது எப்படி?
# வடிவமைப்பது எப்படி, என பார்க்கலாம்.
# செயலுறுபு - (Operators) -
# '>', '<' - செயலுறுபு நினைவகத்தை குறிக்கும் இடத்தை முன் அல்லது பின் அளவில் மாற்றும்
# '+', '-' - செயலுறுபு நினைவகத்தின் மதிப்பை கூட்டும் அல்லது குரைக்கும்
# '[', ']' - செயலுறுபு நிரலின்இயக்கம் பகுதியி அடுத்த அடைவுகுரிப்பிபிற்கு ']', அல்லது '[' இற்கு தாவும் படி குறிக்கும்
# ',','.' - என்ற செயலுறுபு உள்ளிடு, வெளியீடு, குறிக்கும்
# Ref: http://www.muppetlabs.com/~breadbox/bf/
# Program
program21 = "++>+." # make contents of memory [2,1]
program0 = "++>+.[-]." #make contents of memory [2,1] and then [2,0]
program_sum = "++>+++++.<[>+<-]." #sum of 2+5 in cell #2
program_nested = "++>++.<[>+<-]" # 2 op 3 in cell 2
# Write Hello World in BF* language and execute via Ezhil
program_hello_world = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------."
# Ref: https://en.wikipedia.org/wiki/Brainfuck#Hello_World.21
# TODO:
# verify BF program before execution - all [] should be properly nested
# e.g. "++>+.[-]" is OK, whereas
# "]++>+.[+]" is not correct BF program
# Infinite loops => +[]
# make BF execution variables
நிரல்பாகம் தயாரி_மூளைகுழம்பி( )
bfenv = {}
bfenv["stack"] = []
memory = range(0,16)
bfenv["memory"] = memory
bfenv["pc"] = 0
bfenv["mptr"] = 0
bfenv["program"] = ""
# clear memory
@( mptr = 0, mptr < len(memory), mptr = mptr + 1 ) ஆக
memory[mptr] = 0
முடி
பின்கொடு bfenv
முடி
# display BF environment
நிரல்பாகம் அச்சிடு_மூளைகுழம்பி( bfenv )
stack = bfenv["stack"]
memory = bfenv["memory"]
pc = bfenv["pc"]
mptr = bfenv["mptr"]
program = bfenv["program"]
பதிப்பி "Stack =>",stack
பதிப்பி "memory ptr =>",mptr,"Memory =>",memory
பதிப்பி "val @ mptr =>",memory[mptr]
பதிப்பி "PC =>", pc," program =>",program
முடி
நிரல்பாகம் convert_pc( செயலுறுபு )
@( செயலுறுபு == "]" ) ஆனால்
பின்கொடு -1
முடி
@( செயலுறுபு == "[" ) ஆனால்
பின்கொடு +1
முடி
பின்கொடு 0
முடி
# run the program on BF environment
நிரல்பாகம் இயக்கி_மூளைகுழம்பி_பொறி( bfenv )
பிழைநீக்கு = False # DEBUG
stack = bfenv["stack"]
memory = bfenv["memory"]
pc = bfenv["pc"]
mptr = bfenv["mptr"]
program = bfenv["program"]
EOP = len(program) #நிரலின் முடிவு
# முதலில் '[', மற்றும் ']' என்ற தாவும் மடக்கு செயலுறுபுகளுக்கு நாம்
# செயல்பாடுகளை குறிப்பிடாமல் மட்டற்றவைக்கு மட்டும் செயல்களை அளிப்போம்
@( pc < EOP ) வரை
செயலுறுபு = program[pc]
#பதிப்பி hex( ord( செயலுறுபு ) )
@( செயலுறுபு == "+" ) ஆனால்
memory[mptr] = memory[mptr] + 1
pc = pc + 1
@( செயலுறுபு == "-" ) இல்லைஆனால்
memory[mptr] = memory[mptr] - 1
pc = pc + 1
@( செயலுறுபு == ">" ) இல்லைஆனால்
pc = pc + 1
mptr = mptr+1
@( செயலுறுபு == "<" ) இல்லைஆனால்
pc = pc + 1
mptr = mptr-1
@( செயலுறுபு == "." ) இல்லைஆனால்
pc = pc + 1
பதிப்பி memory[mptr],chr(memory[mptr])
@( (செயலுறுபு == "[") && (memory[mptr] > 0) ) இல்லைஆனால்
append(stack,pc);
pc = pc + 1;
@( செயலுறுபு == "[" ) இல்லைஆனால்
#skip program
எண்ணிக்கை = 1
@( எண்ணிக்கை != 0 ) வரை
pc = pc + 1
செயலுறுபு = program[pc]
# @( செயலுறுபு == "]" ) ஆனால்
# mathippu = -1
# @( செயலுறுபு == "[" ) இல்லைஆனால்
# mathippu = +1
# இல்லை
# mathippu = 0
# முடி
எண்ணிக்கை = எண்ணிக்கை + convert_pc( செயலுறுபு )
முடி
pc = pc + 1
@( செயலுறுபு == "]" && ( memory[mptr] == 0 ) ) இல்லைஆனால்
#continue program, and remove stacked operator
pc = pc + 1
pop(stack)
@( செயலுறுபு == "]" ) இல்லைஆனால்
pc = pop(stack)
இல்லை
#பதிப்பி "செயலுறுபு ", செயலுறுபு, " மதிப்பு இயக்க முடியவில்லை"
assert(False)
முடி
@( பிழைநீக்கு ) ஆனால்
பதிப்பி "pc=",pc
#அச்சிடு_மூளைகுழம்பிt( bfenv )
முடி
முடி
bfenv["pc"] = pc
bfenv["mptr"] = mptr
முடி
# run the program on BF environment
நிரல்பாகம் மூளைகுழம்பி_இயக்கி( program )
பிழைநீக்கு = False # DEBUG
# நிரல் செயல்கூறுகளை திரிச்சு ஒரு யெந்திரம் ஆக்குதல்
bfenv = தயாரி_மூளைகுழம்பி()
@( பிழைநீக்கு ) ஆனால்
பதிப்பி bfenv["memory"]
முடி
bfenv["program"]=program
# பொறி தொடக்க நிலை
பதிப்பி "####### starting stage #######"
அச்சிடு_மூளைகுழம்பி( bfenv )
பதிப்பி "####### executing stage #######"
# பொறி இயக்கி
இயக்கி_மூளைகுழம்பி_பொறி( bfenv )
# பொறி இறுதி நிலை
பதிப்பி "####### ending stage #######"
அச்சிடு_மூளைகுழம்பி( bfenv )
முடி
## பரிசோதனைகள்
மூளைகுழம்பி_இயக்கி( program0 )
மூளைகுழம்பி_இயக்கி( program21 )
மூளைகுழம்பி_இயக்கி( program_sum )
மூளைகுழம்பி_இயக்கி( program_nested )
மூளைகுழம்பி_இயக்கி( program_hello_world )
You can’t perform that action at this time.