// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

{
  parserClass = "fuchsia.developer.plugin.fidl.parser.Parser"

  extends = "com.intellij.extapi.psi.ASTWrapperPsiElement"

  psiClassPrefix = "Fidl"
  psiImplClassSuffix = "Impl"
  psiPackage = "fuchsia.developer.plugin.fidl.psi"
  psiImplPackage = "fuchsia.developer.plugin.fidl.psi.impl"

  elementTypeHolderClass = "fuchsia.developer.plugin.fidl.psi.Types"
  elementTypeClass = "fuchsia.developer.plugin.fidl.psi.ElementType"
  tokenTypeClass = "fuchsia.developer.plugin.fidl.psi.TokenType"

  // The FidlNamedElements identify the elements we want to appear in the structure view.
  implements(".*-declaration")="fuchsia.developer.plugin.fidl.psi.FidlNamedElement"
  implements("protocol-method|protocol-event|member-field")="fuchsia.developer.plugin.fidl.psi.FidlNamedElement"
  extends(".*-declaration")="fuchsia.developer.plugin.fidl.psi.FidlNamedElementImpl"
  extends("protocol-method|protocol-event|member-field")="fuchsia.developer.plugin.fidl.psi.FidlNamedElementImpl"

  tokens = [
    line_comment="regexp://.*"
  ]
}

file ::= library-header using-list? declaration-list

library-header ::= attribute-block? LIBRARY compound-identifier SEMICOLON

using-list ::= ( using SEMICOLON )*

using ::= USING_T compound-identifier ( AS identifier-token )?

compound-identifier ::= identifier-token ( DOT identifier-token )*

declaration-list ::= ( declaration SEMICOLON )*

declaration ::= const-declaration |
                protocol-declaration |
                layout-declaration |
                type-alias-declaration |
                resource-declaration |
                service-declaration

declaration-modifiers ::= FLEXIBLE | STRICT | RESOURCE

const-declaration ::= attribute-block? CONST identifier-token type-constructor EQUALS constant

layout-declaration ::= attribute-block? TYPE identifier-token EQUALS inline-layout

inline-layout ::= attribute-block? ( declaration-modifiers )* layout-kind ( layout-subtype )? layout-body

layout-kind ::= BITS | ENUM | STRUCT | TABLE | UNION

layout-subtype ::= COLON type-constructor

layout-body ::= value-layout | struct-layout | ordinal-layout

value-layout ::= OBRACE ( value-layout-member SEMICOLON )+ CBRACE

// This declaration differs slightly from the master grammar in that it uses
// the definition of `constant`, rather than that named reference itself.  This
// is for the benefit of the code in ContextAwareHighlighter.java, which must
// already traverse 3 steps up the ancestor chain (ie, the great grandparent of
// value-layout-member) in order to figure out the layout kind being analyzed.
// Putting `( compound-identifier | literal )` saves an extra step up the tree
// in that code.
value-layout-member ::= attribute-block? identifier-token EQUALS ( compound-identifier | literal )

struct-layout ::= OBRACE ( struct-layout-member SEMICOLON )* CBRACE

struct-layout-member ::= attribute-block? member-field

ordinal-layout ::= OBRACE ( ordinal-layout-member SEMICOLON )* CBRACE

ordinal-layout-member ::= attribute-block? ordinal COLON ( member-field | RESERVED )

protocol-declaration ::= attribute-block? PROTOCOL identifier-token
                         OBRACE ( protocol-member SEMICOLON )* CBRACE

protocol-member ::= protocol-method | protocol-event | protocol-compose

protocol-method ::= attribute-block? identifier-token parameter-list ( ARROW parameter-list ( ERROR type-constructor )? )?

protocol-event ::= attribute-block? ARROW identifier-token parameter-list

protocol-compose ::= COMPOSE compound-identifier

parameter-list ::= OPAREN ( type-constructor )? CPAREN

type-alias-declaration ::= attribute-block? ALIAS identifier-token EQUALS type-constructor

resource-declaration ::= attribute-block? RESOURCE_DEFINITION identifier-token COLON UINT32 OBRACE resource-properties CBRACE

resource-properties ::= PROPERTIES OBRACE ( member-field SEMICOLON )* CBRACE SEMICOLON

service-declaration ::= attribute-block? SERVICE identifier-token OBRACE ( service-member SEMICOLON )* CBRACE

service-member ::= attribute-block? member-field

member-field ::= identifier-token type-constructor

// Attributes are slightly different from master grammar for ease of parsing
attribute-block ::= doc-comments | attributes

doc-comments ::= ( DOC_COMMENT )+ attributes?

attributes ::= attribute*

attribute ::= AT identifier-token ( OPAREN attribute-signature CPAREN )?

attribute-signature ::= attribute-args | constant

attribute-args ::= attribute-arg ( COMMA attribute-arg )*

attribute-arg ::= identifier-token EQUALS constant

type-constructor ::= layout ( LANGLE layout-parameters RANGLE )? ( COLON type-constraints )?

layout ::= inline-layout | compound-identifier

layout-parameters ::= layout-parameter ( COMMA layout-parameter )*

layout-parameter ::= type-constructor | constant

type-constraints ::= type-constraint | ( LANGLE type-constraint ( COMMA type-constraint )* RANGLE )

type-constraint ::= constant

constant ::= compound-identifier | literal

ordinal ::= integral-literal

literal ::= STRING_LITERAL | numeric-literal | TRUE | FALSE

numeric-literal ::= DECIMAL_FLOAT_LITERAL | integral-literal

integral-literal ::= DECIMAL_INTEGRAL_LITERAL | HEX_INTEGRAL_LITERAL | BINARY_INTEGRAL_LITERAL

identifier-token ::= IDENTIFIER | ARRAY | AS | CHANNEL | CONST | ENUM | ERROR | EVENT | EVENTPAIR | FIFO |
                     GUEST | HANDLE | INTERFACE | INTERRUPT | JOB | LIBRARY | LOG | PORT | PROCESS |
                     REQUEST | RESERVED | RESOURCE | SOCKET | STRING | STRUCT | TABLE | THREAD |
                     TIMER | UNION | USING_T | VECTOR | VMAR | VMO | XUNION | BOOL | FLOAT32 |
                     FLOAT64 | INT8 | INT16 | INT32 | INT64 | UINT8 | UINT16 | UINT32 | UINT64 |
                     TRUE | FALSE | PROTOCOL | COMPOSE | BITS | BYTES | EXCEPTION | STRICT |
                     IOMMU | PAGER | PCIDEVICE | PMT | SUSPENDTOKEN | VCPU | SERVICE | FLEXIBLE |
                     CLOCK | RESOURCE_DEFINITION | ALIAS | TYPE | PROPERTIES
