Changes in contrib/arch/hadlbppp.py [6d4c549:3037384] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified contrib/arch/hadlbppp.py ¶
r6d4c549 r3037384 36 36 INC, POST_INC, BLOCK_COMMENT, LINE_COMMENT, SYSTEM, ARCH, HEAD, BODY, NULL, \ 37 37 INST, VAR, FIN, BIND, TO, SUBSUME, DELEGATE, IFACE, EXTENDS, PRE_BODY, \ 38 PROTOTYPE, PAR_LEFT, PAR_RIGHT, SIGNATURE, PROTOCOL, INITIALIZATION, \39 FINALIZATION, FRAME, PROVIDES, REQUIRES = range(29)38 PROTOTYPE, PAR_LEFT, PAR_RIGHT, SIGNATURE, PROTOCOL, FRAME, PROVIDES, \ 39 REQUIRES = range(27) 40 40 41 41 def usage(prname): 42 42 "Print usage syntax" 43 43 44 print "%s < --dumpbp|--dumpadl|--noop>+ <OUTPUT>" % prname44 print "%s <OUTPUT>" % prname 45 45 46 46 def tabs(cnt): … … 246 246 "Convert interface Behavior Protocol to generic protocol" 247 247 248 result = [ ]248 result = ["("] 249 249 i = 0 250 250 … … 266 266 i += 1 267 267 268 result.append(")") 269 result.append("*") 270 268 271 return result 269 272 270 def merge_bp( initialization, finalization,protocols):273 def merge_bp(protocols): 271 274 "Merge several Behavior Protocols" 272 275 273 indep = []274 275 276 if (len(protocols) > 1): 277 result = [] 276 278 first = True 277 279 … … 280 282 first = False 281 283 else: 282 indep.append("|") 283 284 indep.append("(") 285 indep.extend(protocol) 286 indep.append(")") 287 elif (len(protocols) == 1): 288 indep = protocols[0] 289 290 inited = [] 291 292 if (initialization != None): 293 if (len(indep) > 0): 294 inited.append("(") 295 inited.extend(initialization) 296 inited.append(")") 297 inited.append(";") 298 inited.append("(") 299 inited.extend(indep) 300 inited.append(")") 301 else: 302 inited = initialization 303 else: 304 inited = indep 305 306 finited = [] 307 308 if (finalization != None): 309 if (len(inited) > 0): 310 finited.append("(") 311 finited.extend(inited) 312 finited.append(")") 313 finited.append(";") 314 finited.append("(") 315 finited.extend(finalization) 316 finited.append(")") 317 else: 318 finited = finalization 319 else: 320 finited = inited 321 322 return finited 284 result.append("|") 285 286 result.append("(") 287 result.extend(protocol) 288 result.append(")") 289 290 return result 291 292 if (len(protocols) == 1): 293 return protocols[0] 294 295 return [] 323 296 324 297 def parse_bp(name, tokens, base_indent): … … 400 373 "Dump Behavior Protocol of a given frame" 401 374 402 global opt_bp403 404 375 fname = "%s.bp" % frame['name'] 405 376 406 if (archf != None): 407 archf.write("instantiate %s from \"%s\"\n" % (var, fname)) 408 377 archf.write("instantiate %s from \"%s\"\n" % (var, fname)) 409 378 outname = os.path.join(outdir, fname) 410 379 … … 412 381 if ('protocol' in frame): 413 382 protocols.append(frame['protocol']) 414 415 if ('initialization' in frame):416 initialization = frame['initialization']417 else:418 initialization = None419 420 if ('finalization' in frame):421 finalization = frame['finalization']422 else:423 finalization = None424 383 425 384 if ('provides' in frame): … … 434 393 print "%s: Provided interface '%s' is undefined" % (frame['name'], provides['iface']) 435 394 436 437 if (opt_bp): 438 outf = file(outname, "w") 439 outf.write(parse_bp(outname, merge_bp(initialization, finalization, protocols), 0)) 440 outf.close() 395 outf = file(outname, "w") 396 outf.write(parse_bp(outname, merge_bp(protocols), 0)) 397 outf.close() 441 398 442 399 def get_system_arch(): … … 474 431 "Create null frame protocol" 475 432 476 global opt_bp 477 478 if (archf != None): 479 archf.write("frame \"%s\"\n" % fname) 480 433 archf.write("frame \"%s\"\n" % fname) 481 434 outname = os.path.join(outdir, fname) 482 435 483 if (opt_bp): 484 outf = file(outname, "w") 485 outf.write("NULL") 486 outf.close() 436 outf = file(outname, "w") 437 outf.write("NULL") 438 outf.close() 487 439 488 440 def flatten_binds(binds, delegates, subsumes): … … 569 521 "Dump system architecture Behavior Protocol" 570 522 571 global opt_bp572 573 523 arch = get_system_arch() 574 524 … … 612 562 break 613 563 614 615 564 outname = os.path.join(outdir, "%s.archbp" % arch['name']) 616 if (opt_bp): 617 outf = file(outname, "w") 618 else: 619 outf = None 565 outf = file(outname, "w") 620 566 621 567 create_null_bp("null.bp", outdir, outf) … … 627 573 628 574 for dst, src in directed_binds.items(): 629 if (outf != None): 630 outf.write("bind %s to %s\n" % (", ".join(src), dst)) 631 632 if (outf != None): 633 outf.close() 575 outf.write("bind %s to %s\n" % (", ".join(src), dst)) 576 577 outf.close() 634 578 635 579 def preproc_adl(raw, inarg): … … 647 591 global frame 648 592 global protocol 649 global initialization650 global finalization651 593 652 594 global iface_properties … … 747 689 748 690 if (BODY in context): 749 if (FINALIZATION in context):750 if (token == "{"):751 indent += 1752 elif (token == "}"):753 indent -= 1754 755 if (((token[-1] == ":") and (indent == 0)) or (indent == -1)):756 bp = split_bp(finalization)757 finalization = None758 759 if (not frame in frame_properties):760 frame_properties[frame] = {}761 762 if ('finalization' in frame_properties[frame]):763 print "%s: Finalization protocol for frame '%s' already defined" % (inname, frame)764 else:765 frame_properties[frame]['finalization'] = bp766 767 output += "\n%s" % tabs(2)768 output += parse_bp(inname, bp, 2)769 770 context.remove(FINALIZATION)771 if (indent == -1):772 output += "\n%s" % token773 context.remove(BODY)774 context.add(NULL)775 indent = 0776 continue777 else:778 indent = 2779 else:780 finalization += token781 continue782 783 if (INITIALIZATION in context):784 if (token == "{"):785 indent += 1786 elif (token == "}"):787 indent -= 1788 789 if (((token[-1] == ":") and (indent == 0)) or (indent == -1)):790 bp = split_bp(initialization)791 initialization = None792 793 if (not frame in frame_properties):794 frame_properties[frame] = {}795 796 if ('initialization' in frame_properties[frame]):797 print "%s: Initialization protocol for frame '%s' already defined" % (inname, frame)798 else:799 frame_properties[frame]['initialization'] = bp800 801 output += "\n%s" % tabs(2)802 output += parse_bp(inname, bp, 2)803 804 context.remove(INITIALIZATION)805 if (indent == -1):806 output += "\n%s" % token807 context.remove(BODY)808 context.add(NULL)809 indent = 0810 continue811 else:812 indent = 2813 else:814 initialization += token815 continue816 817 691 if (PROTOCOL in context): 818 692 if (token == "{"): … … 821 695 indent -= 1 822 696 823 if ( ((token[-1] == ":") and (indent == 0)) or (indent == -1)):697 if (indent == -1): 824 698 bp = split_bp(protocol) 825 699 protocol = None … … 835 709 output += "\n%s" % tabs(2) 836 710 output += parse_bp(inname, bp, 2) 711 output += "\n%s" % token 712 indent = 0 837 713 838 714 context.remove(PROTOCOL) 839 if (indent == -1): 840 output += "\n%s" % token 841 context.remove(BODY) 842 context.add(NULL) 843 indent = 0 844 continue 845 else: 846 indent = 2 715 context.remove(BODY) 716 context.add(NULL) 847 717 else: 848 718 protocol += token 849 continue 719 720 continue 850 721 851 722 if (REQUIRES in context): … … 945 816 output += "\n%s%s" % (tabs(indent - 1), token) 946 817 context.add(PROVIDES) 818 protocol = "" 947 819 continue 948 820 … … 950 822 output += "\n%s%s" % (tabs(indent - 1), token) 951 823 context.add(REQUIRES) 952 continue 953 954 if (token == "initialization:"): 955 output += "\n%s%s" % (tabs(indent - 1), token) 956 indent = 0 957 context.add(INITIALIZATION) 958 initialization = "" 959 continue 960 961 if (token == "finalization:"): 962 output += "\n%s%s" % (tabs(indent - 1), token) 963 indent = 0 964 context.add(FINALIZATION) 965 finalization = "" 824 protocol = "" 966 825 continue 967 826 … … 1153 1012 print "%s: Expected inherited interface name in interface head '%s'" % (inname, interface) 1154 1013 else: 1155 output += " %s" % token1014 output += " %s" % token 1156 1015 if (not interface in iface_properties): 1157 1016 iface_properties[interface] = {} … … 1164 1023 1165 1024 if (token == "extends"): 1166 output += " %s" % token1025 output += " %s" % token 1167 1026 context.add(EXTENDS) 1168 1027 continue … … 1517 1376 global frame 1518 1377 global protocol 1519 global initialization1520 global finalization1521 1378 1522 1379 global arg0 1523 1524 global opt_adl1525 1380 1526 1381 output = "" … … 1530 1385 frame = None 1531 1386 protocol = None 1532 initialization = None1533 finalization = None1534 1387 arg0 = None 1535 1388 … … 1537 1390 output = output.strip() 1538 1391 1539 if ( (output != "") and (opt_adl)):1392 if (output != ""): 1540 1393 outf = file(outname, "w") 1541 1394 outf.write(output) … … 1563 1416 global frame_properties 1564 1417 global arch_properties 1565 global opt_bp 1566 global opt_adl 1567 1568 if (len(sys.argv) < 3): 1418 1419 if (len(sys.argv) < 2): 1569 1420 usage(sys.argv[0]) 1570 1421 return 1571 1422 1572 opt_bp = False 1573 opt_adl = False 1574 1575 for arg in sys.argv[1:(len(sys.argv) - 1)]: 1576 if (arg == "--dumpbp"): 1577 opt_bp = True 1578 elif (arg == "--dumpadl"): 1579 opt_adl = True 1580 elif (arg == "--noop"): 1581 pass 1582 else: 1583 print "Error: Unknown command line option '%s'" % arg 1584 return 1585 1586 path = os.path.abspath(sys.argv[-1]) 1423 path = os.path.abspath(sys.argv[1]) 1587 1424 if (not os.path.isdir(path)): 1588 1425 print "Error: <OUTPUT> is not a directory"
Note:
See TracChangeset
for help on using the changeset viewer.