Skip to content

Commit

Permalink
Feature Definition
Browse files Browse the repository at this point in the history
* fixed syntax to support attributes as well
* related to sealangdotorg/sea#35
  • Loading branch information
ppaulweber committed Mar 3, 2020
1 parent ed2c6b9 commit 4ed9e8b
Show file tree
Hide file tree
Showing 7 changed files with 10,078 additions and 9,770 deletions.
34 changes: 26 additions & 8 deletions src/GrammarParser.y
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ END 0 "end of file"
%type <FunctionDefinition::Ptr> StructureDefinitionElement
%type <FunctionDefinitions::Ptr> StructureDefinitionList
%type <FeatureDefinition::Ptr> FeatureDefinition
%type <Definition::Ptr> FeatureDeclarationOrDefinition
%type <Definitions::Ptr> FeatureDeclarationsAndDefinitions
%type <Definition::Ptr> FeatureDefinitionElement
%type <Definitions::Ptr> FeatureDefinitionList
%type <ImplementationDefinition::Ptr> ImplementationDefinition
%type <Definition::Ptr> ImplementationDefinitionDefinition
%type <Definitions::Ptr> ImplementationDefinitionDefinitions
Expand Down Expand Up @@ -613,38 +613,56 @@ StructureDefinitionList
//

FeatureDefinition
: FEATURE Identifier EQUAL LCURPAREN FeatureDeclarationsAndDefinitions RCURPAREN
: FEATURE Identifier EQUAL LCURPAREN FeatureDefinitionList RCURPAREN
{
// TODO: FIXME: @ppaulweber: handle AST keyword tokens $1, $3, $4, and $6
$$ = Ast::make< FeatureDefinition >( @$, $2, $5 );
}
;


FeatureDeclarationOrDefinition
: DeclarationDefinition
FeatureDefinitionElement
: LSQPAREN Attributes RSQPAREN DeclarationDefinition
{
auto definition = $4;
definition->setAttributes( $2 );
$$ = definition;
}
| DeclarationDefinition
{
$$ = $1;
}
| LSQPAREN Attributes RSQPAREN DerivedDefinition
{
auto definition = $4;
definition->setAttributes( $2 );
$$ = definition;
}
| DerivedDefinition
{
$$ = $1;
}
| LSQPAREN Attributes RSQPAREN RuleDefinition
{
auto definition = $4;
definition->setAttributes( $2 );
$$ = definition;
}
| RuleDefinition
{
$$ = $1;
}
;


FeatureDeclarationsAndDefinitions
: FeatureDeclarationsAndDefinitions FeatureDeclarationOrDefinition
FeatureDefinitionList
: FeatureDefinitionList FeatureDefinitionElement
{
auto definitions = $1;
definitions->add( $2 );
$$ = definitions;
}
| FeatureDeclarationOrDefinition
| FeatureDefinitionElement
{
auto definitions = Ast::make< Definitions >( @$ );
definitions->add( $1 );
Expand Down
23 changes: 13 additions & 10 deletions src/various/Grammar.org
Original file line number Diff line number Diff line change
Expand Up @@ -204,31 +204,34 @@ StructureDefinitionList ::= StructureDefinitionList StructureDefinitionElement
** FeatureDefinition

#+begin_src
FeatureDefinition ::= "feature" Identifier "=" "{" FeatureDeclarationsAndDefinitions "}"
FeatureDefinition ::= "feature" Identifier "=" "{" FeatureDefinitionList "}"
#+end_src

#+html: {{page>.:grammar:FeatureDefinition&noheader&nofooter}}


** FeatureDeclarationOrDefinition
** FeatureDefinitionElement

#+begin_src
FeatureDeclarationOrDefinition ::= DeclarationDefinition
| DerivedDefinition
| RuleDefinition
FeatureDefinitionElement ::= "[" Attributes "]" DeclarationDefinition
| DeclarationDefinition
| "[" Attributes "]" DerivedDefinition
| DerivedDefinition
| "[" Attributes "]" RuleDefinition
| RuleDefinition
#+end_src

#+html: {{page>.:grammar:FeatureDeclarationOrDefinition&noheader&nofooter}}
#+html: {{page>.:grammar:FeatureDefinitionElement&noheader&nofooter}}


** FeatureDeclarationsAndDefinitions
** FeatureDefinitionList

#+begin_src
FeatureDeclarationsAndDefinitions ::= FeatureDeclarationsAndDefinitions FeatureDeclarationOrDefinition
| FeatureDeclarationOrDefinition
FeatureDefinitionList ::= FeatureDefinitionList FeatureDefinitionElement
| FeatureDefinitionElement
#+end_src

#+html: {{page>.:grammar:FeatureDeclarationsAndDefinitions&noheader&nofooter}}
#+html: {{page>.:grammar:FeatureDefinitionList&noheader&nofooter}}


** ImplementationDefinition
Expand Down
Loading

0 comments on commit 4ed9e8b

Please sign in to comment.