Templates

A template has the following syntax definition

template : TOKEN_TEMPLATE name TOKEN_OBRACE

class_id

template_parts

TOKEN_CBRACE

template_parts : template_members_part TOKEN_OBRACKET

template_option_info

TOKEN_CBRACKET

| template_members_list

template_members_part : /* Empty */

| template_members_list

template_option_info : ellipsis

| template_option_list

template_members_list : template_members

| template_members_list template_members

template_members : primitive

| array

| template_reference

primitive : primitive_type optional_name TOKEN_SEMICOLON

array : TOKEN_ARRAY array_data_type name dimension_list

TOKEN_SEMICOLON

template_reference : name optional_name YT_SEMICOLON

primitive_type : TOKEN_WORD

| TOKEN_DWORD

| TOKEN_FLOAT

| TOKEN_DOUBLE

| TOKEN_CHAR

| TOKEN_UCHAR

| TOKEN_SWORD

| TOKEN_SDWORD

| TOKEN_LPSTR

| TOKEN_UNICODE

| TOKEN_CSTRING

array_data_type : primitive_type

| name

dimension_list : dimension

| dimension_list dimension

dimension : TOKEN_OBRACKET dimension_size TOKEN_CBRACKET

dimension_size : TOKEN_INTEGER

| name

template_option_list : template_option_part

| template_option_list template_option_part

template_option_part : name optional_class_id

name : TOKEN_NAME

optional_name : /* Empty */

| name

class_id : TOKEN_GUID

optional_class_id : /* Empty */

| class_id

ellipsis : TOKEN_DOT TOKEN_DOT TOKEN_DOT