plcopen/structures.py
changeset 586 9aa96a36cf33
parent 582 aa41547baa2a
child 638 2b9ed21d965c
equal deleted inserted replaced
585:bd8c7a033b17 586:9aa96a36cf33
   600 #                            Languages Keywords
   600 #                            Languages Keywords
   601 #-------------------------------------------------------------------------------
   601 #-------------------------------------------------------------------------------
   602 
   602 
   603 
   603 
   604 # Keywords for Pou Declaration
   604 # Keywords for Pou Declaration
   605 POU_KEYWORDS = ["FUNCTION", "END_FUNCTION", "FUNCTION_BLOCK", "END_FUNCTION_BLOCK",
   605 POU_BLOCK_START_KEYWORDS = ["FUNCTION", "FUNCTION_BLOCK", "PROGRAM"]
   606  "PROGRAM", "END_PROGRAM", "EN", "ENO", "F_EDGE", "R_EDGE"]
   606 POU_BLOCK_END_KEYWORDS = ["END_FUNCTION", "END_FUNCTION_BLOCK", "END_PROGRAM"]
       
   607 POU_KEYWORDS = ["EN", "ENO", "F_EDGE", "R_EDGE"] + POU_BLOCK_START_KEYWORDS + POU_BLOCK_END_KEYWORDS
   607 for category in BlockTypes:
   608 for category in BlockTypes:
   608     for block in category["list"]:
   609     for block in category["list"]:
   609         if block["name"] not in POU_KEYWORDS:
   610         if block["name"] not in POU_KEYWORDS:
   610             POU_KEYWORDS.append(block["name"])
   611             POU_KEYWORDS.append(block["name"])
   611 
   612 
   612 
   613 
   613 # Keywords for Type Declaration
   614 # Keywords for Type Declaration
   614 TYPE_KEYWORDS = ["TYPE", "END_TYPE", "STRUCT", "END_STRUCT", "ARRAY", "OF", "T",
   615 TYPE_BLOCK_START_KEYWORDS = ["TYPE", "STRUCT"]
   615  "D", "TIME_OF_DAY", "DATE_AND_TIME"]
   616 TYPE_BLOCK_END_KEYWORDS = ["END_TYPE", "END_STRUCT"]
       
   617 TYPE_KEYWORDS = ["ARRAY", "OF", "T", "D", "TIME_OF_DAY", "DATE_AND_TIME"] + TYPE_BLOCK_START_KEYWORDS + TYPE_BLOCK_END_KEYWORDS
   616 TYPE_KEYWORDS.extend([keyword for keyword in TypeHierarchy.keys() if keyword not in TYPE_KEYWORDS])
   618 TYPE_KEYWORDS.extend([keyword for keyword in TypeHierarchy.keys() if keyword not in TYPE_KEYWORDS])
   617 
   619 
   618 
   620 
   619 # Keywords for Variable Declaration
   621 # Keywords for Variable Declaration
   620 VAR_KEYWORDS = ["VAR", "VAR_INPUT", "VAR_OUTPUT", "VAR_IN_OUT", "VAR_TEMP", 
   622 VAR_BLOCK_START_KEYWORDS = ["VAR", "VAR_INPUT", "VAR_OUTPUT", "VAR_IN_OUT", "VAR_TEMP", "VAR_EXTERNAL"]
   621  "VAR_EXTERNAL", "END_VAR", "AT", "CONSTANT", "RETAIN", "NON_RETAIN"]
   623 VAR_BLOCK_END_KEYWORDS = ["END_VAR"]
       
   624 VAR_KEYWORDS = ["AT", "CONSTANT", "RETAIN", "NON_RETAIN"] + VAR_BLOCK_START_KEYWORDS + VAR_BLOCK_END_KEYWORDS
   622 
   625 
   623 
   626 
   624 # Keywords for Configuration Declaration
   627 # Keywords for Configuration Declaration
   625 CONFIG_KEYWORDS = ["CONFIGURATION", "END_CONFIGURATION", "RESOURCE", "ON", "END_RESOURCE",
   628 CONFIG_BLOCK_START_KEYWORDS = ["CONFIGURATION", "RESOURCE", "VAR_ACCESS", "VAR_CONFIG", "VAR_GLOBAL"]
   626  "PROGRAM", "WITH", "READ_ONLY", "READ_WRITE", "TASK", "VAR_ACCESS", "VAR_CONFIG", 
   629 CONFIG_BLOCK_END_KEYWORDS = ["END_CONFIGURATION", "END_RESOURCE", "END_VAR"]
   627  "VAR_GLOBAL", "END_VAR"]
   630 CONFIG_KEYWORDS = ["ON", "PROGRAM", "WITH", "READ_ONLY", "READ_WRITE", "TASK"] + CONFIG_BLOCK_START_KEYWORDS + CONFIG_BLOCK_END_KEYWORDS
   628 
       
   629 
   631 
   630 # Keywords for Structured Function Chart
   632 # Keywords for Structured Function Chart
   631 SFC_KEYWORDS = ["ACTION", "END_ACTION", "INITIAL_STEP", "STEP", "END_STEP", "TRANSITION",
   633 SFC_BLOCK_START_KEYWORDS = ["ACTION", "INITIAL_STEP", "STEP", "TRANSITION"]
   632  "FROM", "TO", "END_TRANSITION"]
   634 SFC_BLOCK_END_KEYWORDS = ["END_ACTION", "END_STEP", "END_TRANSITION"]
       
   635 SFC_KEYWORDS = ["FROM", "TO"] + SFC_BLOCK_START_KEYWORDS + SFC_BLOCK_START_KEYWORDS
   633 
   636 
   634 
   637 
   635 # Keywords for Instruction List
   638 # Keywords for Instruction List
   636 IL_KEYWORDS = ["TRUE", "FALSE", "LD", "LDN", "ST", "STN", "S", "R", "AND", "ANDN", "OR", "ORN",
   639 IL_KEYWORDS = ["TRUE", "FALSE", "LD", "LDN", "ST", "STN", "S", "R", "AND", "ANDN", "OR", "ORN",
   637  "XOR", "XORN", "NOT", "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "EQ", "NE",
   640  "XOR", "XORN", "NOT", "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "EQ", "NE",
   643 ST_BLOCK_END_KEYWORDS = ["END_IF", "END_CASE", "END_FOR", "END_WHILE", "END_REPEAT"]
   646 ST_BLOCK_END_KEYWORDS = ["END_IF", "END_CASE", "END_FOR", "END_WHILE", "END_REPEAT"]
   644 ST_KEYWORDS = ["TRUE", "FALSE", "THEN", "OF", "TO", "BY", "DO", "DO", "UNTIL", "EXIT", 
   647 ST_KEYWORDS = ["TRUE", "FALSE", "THEN", "OF", "TO", "BY", "DO", "DO", "UNTIL", "EXIT", 
   645  "RETURN", "NOT", "MOD", "AND", "XOR", "OR"] + ST_BLOCK_START_KEYWORDS + ST_BLOCK_END_KEYWORDS
   648  "RETURN", "NOT", "MOD", "AND", "XOR", "OR"] + ST_BLOCK_START_KEYWORDS + ST_BLOCK_END_KEYWORDS
   646 
   649 
   647 # All the keywords of IEC
   650 # All the keywords of IEC
       
   651 IEC_BLOCK_START_KEYWORDS = []
       
   652 IEC_BLOCK_END_KEYWORDS = []
   648 IEC_KEYWORDS = ["E", "TRUE", "FALSE"]
   653 IEC_KEYWORDS = ["E", "TRUE", "FALSE"]
   649 IEC_KEYWORDS.extend([keyword for keyword in POU_KEYWORDS if keyword not in IEC_KEYWORDS])
   654 for all_keywords, keywords_list in [(IEC_BLOCK_START_KEYWORDS, [POU_BLOCK_START_KEYWORDS, TYPE_BLOCK_START_KEYWORDS,
   650 IEC_KEYWORDS.extend([keyword for keyword in TYPE_KEYWORDS if keyword not in IEC_KEYWORDS])
   655                                                                 VAR_BLOCK_START_KEYWORDS, CONFIG_BLOCK_START_KEYWORDS,
   651 IEC_KEYWORDS.extend([keyword for keyword in VAR_KEYWORDS if keyword not in IEC_KEYWORDS])
   656                                                                 SFC_BLOCK_START_KEYWORDS, ST_BLOCK_START_KEYWORDS]),
   652 IEC_KEYWORDS.extend([keyword for keyword in CONFIG_KEYWORDS if keyword not in IEC_KEYWORDS])
   657                                     (IEC_BLOCK_END_KEYWORDS, [POU_BLOCK_END_KEYWORDS, TYPE_BLOCK_END_KEYWORDS,
   653 IEC_KEYWORDS.extend([keyword for keyword in SFC_KEYWORDS if keyword not in IEC_KEYWORDS])
   658                                                               VAR_BLOCK_END_KEYWORDS, CONFIG_BLOCK_END_KEYWORDS,
   654 IEC_KEYWORDS.extend([keyword for keyword in IL_KEYWORDS if keyword not in IEC_KEYWORDS])
   659                                                               SFC_BLOCK_END_KEYWORDS, ST_BLOCK_END_KEYWORDS]),
   655 IEC_KEYWORDS.extend([keyword for keyword in ST_KEYWORDS if keyword not in IEC_KEYWORDS])
   660                                     (IEC_KEYWORDS, [POU_KEYWORDS, TYPE_KEYWORDS, VAR_KEYWORDS, CONFIG_KEYWORDS,
   656 
   661                                                     SFC_KEYWORDS, IL_KEYWORDS, ST_KEYWORDS])]:
       
   662     for keywords in keywords_list:
       
   663         all_keywords.extend([keyword for keyword in keywords if keyword not in all_keywords])
       
   664