From 9d58dc7f98b6e108ea3a68859ac5ac685793f261 Mon Sep 17 00:00:00 2001 From: Ian Kariniemi Date: Fri, 4 Nov 2022 15:51:55 -0500 Subject: [PATCH] Adds QNames antiquote production. --- grammars/silver/compiler/definition/core/QName.sv | 1 + .../silver/compiler/extension/convenience/Lists.sv | 8 ++++++++ .../compiler/extension/silverconstruction/Syntax.sv | 10 ++++++++++ .../compiler/extension/silverconstruction/Terminals.sv | 1 + .../extension/silverconstruction/Translation.sv | 1 + 5 files changed, 21 insertions(+) diff --git a/grammars/silver/compiler/definition/core/QName.sv b/grammars/silver/compiler/definition/core/QName.sv index f46fb2ea8..b7d0fa433 100644 --- a/grammars/silver/compiler/definition/core/QName.sv +++ b/grammars/silver/compiler/definition/core/QName.sv @@ -67,6 +67,7 @@ top::QName ::= msg::[Message] top.lookupAttribute = decorate errorLookup(msg) with {}; } + nonterminal QNameLookup with fullName, typeScheme, errors, dcls, dcl, found; synthesized attribute lookupValue :: Decorated QNameLookup occurs on QName; diff --git a/grammars/silver/compiler/extension/convenience/Lists.sv b/grammars/silver/compiler/extension/convenience/Lists.sv index 700be4edc..871135638 100644 --- a/grammars/silver/compiler/extension/convenience/Lists.sv +++ b/grammars/silver/compiler/extension/convenience/Lists.sv @@ -51,6 +51,14 @@ top::QNames ::= id1::QNameWithTL ',' id2::QNames top.qnames = [id1] ++ id2.qnames; } +abstract production qNamesError +top::QNames ::= msg::[Message] +{ + top.unparse = ""; + top.qnames = []; + +} + -------------------------------------------------------------------------------- function makeOccursDcls diff --git a/grammars/silver/compiler/extension/silverconstruction/Syntax.sv b/grammars/silver/compiler/extension/silverconstruction/Syntax.sv index d52d02729..bf70a2f97 100644 --- a/grammars/silver/compiler/extension/silverconstruction/Syntax.sv +++ b/grammars/silver/compiler/extension/silverconstruction/Syntax.sv @@ -7,6 +7,7 @@ imports silver:compiler:definition:env; imports silver:compiler:definition:type:syntax; imports silver:compiler:modification:list; imports silver:compiler:extension:patternmatching; +imports silver:compiler:extension:convenience; concrete production quoteAGDcl top::Expr ::= 'Silver_AGDcl' '{' ast::AGDcl '}' @@ -117,6 +118,15 @@ top::QName ::= '$QName' '{' e::Expr '}' location=top.location); } +concrete production antiquoteQNames +top::QNames ::= '$QNames' '{' e::Expr '}' +{ + top.unparse = s"$$QNames{${e.unparse}}"; + forwards to + qNamesError( + [err(e.location, "$QNames should not occur outside of quoted Silver literal")]); +} + concrete production antiquoteQNameAttrOccur top::QNameAttrOccur ::= '$QNameAttrOccur' '{' e::Expr '}' { diff --git a/grammars/silver/compiler/extension/silverconstruction/Terminals.sv b/grammars/silver/compiler/extension/silverconstruction/Terminals.sv index 6a4c46217..0acaa6a21 100644 --- a/grammars/silver/compiler/extension/silverconstruction/Terminals.sv +++ b/grammars/silver/compiler/extension/silverconstruction/Terminals.sv @@ -16,6 +16,7 @@ terminal AntiquotePattern_t '$Pattern' lexer classes {Antiqu terminal AntiquoteAspectRHS_t '$AspectRHS' lexer classes {Antiquote}; terminal AntiquoteProductionStmt_t '$ProductionStmt' lexer classes {Antiquote}; terminal AntiquoteQName_t '$QName' lexer classes {Antiquote}; +terminal AntiquoteQNames_t '$QNames' lexer classes {Antiquote}; terminal AntiquoteQNameAttrOccur_t '$QNameAttrOccur' lexer classes {Antiquote}; terminal AntiquoteName_t '$Name' lexer classes {Antiquote}; terminal Antiquote_qName_t '$qName' lexer classes {Antiquote}; diff --git a/grammars/silver/compiler/extension/silverconstruction/Translation.sv b/grammars/silver/compiler/extension/silverconstruction/Translation.sv index 33a990a55..8a27d4e48 100644 --- a/grammars/silver/compiler/extension/silverconstruction/Translation.sv +++ b/grammars/silver/compiler/extension/silverconstruction/Translation.sv @@ -14,6 +14,7 @@ top::AST ::= prodName::String children::ASTs annotations::NamedASTs "silver:compiler:extension:silverconstruction:antiquoteAspectRHS", "silver:compiler:extension:silverconstruction:antiquoteProductionStmt", "silver:compiler:extension:silverconstruction:antiquoteQName", + "silver:compiler:extension:silverconstruction:antiquoteQNames", "silver:compiler:extension:silverconstruction:antiquoteQNameAttrOccur", "silver:compiler:extension:silverconstruction:antiquoteName"];