438 def WriteSemanticMaps(self):
439
440 self.CommonHeaderFileScala.write("object ScriptEvalFunc {\n object ScriptOperators extends ChiselEnum {\n val ")
441
442 Counter = 0
443 CheckForDuplicateList = []
444
445 self.CommonHeaderFile.write("#define " + "FUNC_UNDEFINED " + str(Counter) + "\n")
446 self.CommonHeaderFileScala.write("sFunc" + "Undefined")
447 Counter += 1
448
449 for X in self.OperatorsOneOperand:
450
451 if X not in CheckForDuplicateList:
452 self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
453 self.CommonHeaderFileScala.write(", sFunc" + X.capitalize())
454
455 CheckForDuplicateList.append(X)
456 Counter += 1
457
458 for X in self.OperatorsTwoOperand:
459
460 if X not in CheckForDuplicateList:
461 self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
462 self.CommonHeaderFileScala.write(", sFunc" + X.capitalize())
463 CheckForDuplicateList.append(X)
464 Counter += 1
465
466 for X in self.SemantiRulesList:
467
468 if X not in CheckForDuplicateList:
469 self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
470 self.CommonHeaderFileScala.write(", sFunc" + X.capitalize())
471 CheckForDuplicateList.append(X)
472 Counter += 1
473
474 for X in self.keywordList:
475
476 if X not in CheckForDuplicateList:
477 self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
478
479
480
481
482 self.CommonHeaderFileScala.write(", sFunc" + X.capitalize() + "")
483
484 CheckForDuplicateList.append(X)
485 Counter += 1
486
487
488 self.CommonHeaderFileScala.write(" = Value\n }\n} ")
489
490
491 self.SourceFile.write("const SYMBOL_MAP SemanticRulesMapList[]= {\n")
492 self.HeaderFile.write("extern const SYMBOL_MAP SemanticRulesMapList[];\n")
493
494 for X in self.OperatorsOneOperand:
495 self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
496
497 for X in self.OperatorsTwoOperand:
498 self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
499
500 for X in self.SemantiRulesList:
501 self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
502
503 for X in self.keywordList:
504 self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
505
506 for X in self.AssignmentOperator:
507 self.SourceFile.write(
"{\"@" + X.upper() +
"\", "+
"FUNC_" + X.upper().
replace(
"_ASSIGNMENT",
"") +
"},\n")
508
509 self.SourceFile.write("};\n")
510
511 CheckForDuplicateList = []
512 self.CommonHeaderFile.write("\nstatic const char *const FunctionNames[] = {")
513 self.CommonHeaderFile.write("\n\"FUNC_UNDEFINED\""+ ",\n")
514 for X in self.OperatorsOneOperand:
515 if X not in CheckForDuplicateList:
516 self.CommonHeaderFile.write("\"" + "FUNC_" + X.upper() + "\"" + ",\n")
517 CheckForDuplicateList.append(X)
518
519 for X in self.OperatorsTwoOperand:
520 if X not in CheckForDuplicateList:
521 self.CommonHeaderFile.write("\"" + "FUNC_" + X.upper() + "\"" + ",\n")
522 CheckForDuplicateList.append(X)
523
524 for X in self.SemantiRulesList:
525 if X not in CheckForDuplicateList:
526 self.CommonHeaderFile.write("\"" + "FUNC_" + X.upper() + "\"" + ",\n")
527 CheckForDuplicateList.append(X)
528
529 for X in self.keywordList:
530 if X not in CheckForDuplicateList:
531 self.CommonHeaderFile.write("\"" + "FUNC_" + X.upper() + "\"" + ",\n")
532 CheckForDuplicateList.append(X)
533
534 self.CommonHeaderFile.write("};\n")
535
536