Changeset 6d4c549 in mainline for contrib/arch/hadlbppp.py
- Timestamp:
- 2009-09-25T15:01:03Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bbf88db
- Parents:
- 2e37308
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
contrib/arch/hadlbppp.py
r2e37308 r6d4c549 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, FRAME, PROVIDES, \39 REQUIRES = range(27)38 PROTOTYPE, PAR_LEFT, PAR_RIGHT, SIGNATURE, PROTOCOL, INITIALIZATION, \ 39 FINALIZATION, FRAME, PROVIDES, REQUIRES = range(29) 40 40 41 41 def usage(prname): 42 42 "Print usage syntax" 43 43 44 print "%s < OUTPUT>" % prname44 print "%s <--dumpbp|--dumpadl|--noop>+ <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 271 268 return result 272 269 273 def merge_bp( protocols):270 def merge_bp(initialization, finalization, protocols): 274 271 "Merge several Behavior Protocols" 275 272 273 indep = [] 274 276 275 if (len(protocols) > 1): 277 result = []278 276 first = True 279 277 … … 282 280 first = False 283 281 else: 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 [] 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 296 323 297 324 def parse_bp(name, tokens, base_indent): … … 373 400 "Dump Behavior Protocol of a given frame" 374 401 402 global opt_bp 403 375 404 fname = "%s.bp" % frame['name'] 376 405 377 archf.write("instantiate %s from \"%s\"\n" % (var, fname)) 406 if (archf != None): 407 archf.write("instantiate %s from \"%s\"\n" % (var, fname)) 408 378 409 outname = os.path.join(outdir, fname) 379 410 … … 381 412 if ('protocol' in frame): 382 413 protocols.append(frame['protocol']) 414 415 if ('initialization' in frame): 416 initialization = frame['initialization'] 417 else: 418 initialization = None 419 420 if ('finalization' in frame): 421 finalization = frame['finalization'] 422 else: 423 finalization = None 383 424 384 425 if ('provides' in frame): … … 393 434 print "%s: Provided interface '%s' is undefined" % (frame['name'], provides['iface']) 394 435 395 outf = file(outname, "w") 396 outf.write(parse_bp(outname, merge_bp(protocols), 0)) 397 outf.close() 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() 398 441 399 442 def get_system_arch(): … … 431 474 "Create null frame protocol" 432 475 433 archf.write("frame \"%s\"\n" % fname) 476 global opt_bp 477 478 if (archf != None): 479 archf.write("frame \"%s\"\n" % fname) 480 434 481 outname = os.path.join(outdir, fname) 435 482 436 outf = file(outname, "w") 437 outf.write("NULL") 438 outf.close() 483 if (opt_bp): 484 outf = file(outname, "w") 485 outf.write("NULL") 486 outf.close() 439 487 440 488 def flatten_binds(binds, delegates, subsumes): … … 521 569 "Dump system architecture Behavior Protocol" 522 570 571 global opt_bp 572 523 573 arch = get_system_arch() 524 574 … … 562 612 break 563 613 614 564 615 outname = os.path.join(outdir, "%s.archbp" % arch['name']) 565 outf = file(outname, "w") 616 if (opt_bp): 617 outf = file(outname, "w") 618 else: 619 outf = None 566 620 567 621 create_null_bp("null.bp", outdir, outf) … … 573 627 574 628 for dst, src in directed_binds.items(): 575 outf.write("bind %s to %s\n" % (", ".join(src), dst)) 576 577 outf.close() 629 if (outf != None): 630 outf.write("bind %s to %s\n" % (", ".join(src), dst)) 631 632 if (outf != None): 633 outf.close() 578 634 579 635 def preproc_adl(raw, inarg): … … 591 647 global frame 592 648 global protocol 649 global initialization 650 global finalization 593 651 594 652 global iface_properties … … 689 747 690 748 if (BODY in context): 749 if (FINALIZATION in context): 750 if (token == "{"): 751 indent += 1 752 elif (token == "}"): 753 indent -= 1 754 755 if (((token[-1] == ":") and (indent == 0)) or (indent == -1)): 756 bp = split_bp(finalization) 757 finalization = None 758 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'] = bp 766 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" % token 773 context.remove(BODY) 774 context.add(NULL) 775 indent = 0 776 continue 777 else: 778 indent = 2 779 else: 780 finalization += token 781 continue 782 783 if (INITIALIZATION in context): 784 if (token == "{"): 785 indent += 1 786 elif (token == "}"): 787 indent -= 1 788 789 if (((token[-1] == ":") and (indent == 0)) or (indent == -1)): 790 bp = split_bp(initialization) 791 initialization = None 792 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'] = bp 800 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" % token 807 context.remove(BODY) 808 context.add(NULL) 809 indent = 0 810 continue 811 else: 812 indent = 2 813 else: 814 initialization += token 815 continue 816 691 817 if (PROTOCOL in context): 692 818 if (token == "{"): … … 695 821 indent -= 1 696 822 697 if ( indent == -1):823 if (((token[-1] == ":") and (indent == 0)) or (indent == -1)): 698 824 bp = split_bp(protocol) 699 825 protocol = None … … 709 835 output += "\n%s" % tabs(2) 710 836 output += parse_bp(inname, bp, 2) 711 output += "\n%s" % token712 indent = 0713 837 714 838 context.remove(PROTOCOL) 715 context.remove(BODY) 716 context.add(NULL) 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 717 847 else: 718 848 protocol += token 719 720 continue 849 continue 721 850 722 851 if (REQUIRES in context): … … 816 945 output += "\n%s%s" % (tabs(indent - 1), token) 817 946 context.add(PROVIDES) 818 protocol = ""819 947 continue 820 948 … … 822 950 output += "\n%s%s" % (tabs(indent - 1), token) 823 951 context.add(REQUIRES) 824 protocol = "" 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 = "" 825 966 continue 826 967 … … 1012 1153 print "%s: Expected inherited interface name in interface head '%s'" % (inname, interface) 1013 1154 else: 1014 output += " %s" % token1155 output += "%s " % token 1015 1156 if (not interface in iface_properties): 1016 1157 iface_properties[interface] = {} … … 1023 1164 1024 1165 if (token == "extends"): 1025 output += " %s" % token1166 output += "%s " % token 1026 1167 context.add(EXTENDS) 1027 1168 continue … … 1376 1517 global frame 1377 1518 global protocol 1519 global initialization 1520 global finalization 1378 1521 1379 1522 global arg0 1523 1524 global opt_adl 1380 1525 1381 1526 output = "" … … 1385 1530 frame = None 1386 1531 protocol = None 1532 initialization = None 1533 finalization = None 1387 1534 arg0 = None 1388 1535 … … 1390 1537 output = output.strip() 1391 1538 1392 if ( output != ""):1539 if ((output != "") and (opt_adl)): 1393 1540 outf = file(outname, "w") 1394 1541 outf.write(output) … … 1416 1563 global frame_properties 1417 1564 global arch_properties 1418 1419 if (len(sys.argv) < 2): 1565 global opt_bp 1566 global opt_adl 1567 1568 if (len(sys.argv) < 3): 1420 1569 usage(sys.argv[0]) 1421 1570 return 1422 1571 1423 path = os.path.abspath(sys.argv[1]) 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]) 1424 1587 if (not os.path.isdir(path)): 1425 1588 print "Error: <OUTPUT> is not a directory"
Note:
See TracChangeset
for help on using the changeset viewer.