【问题标题】:How to insert a string template into another string template ST 4.0如何将字符串模板插入另一个字符串模板 ST 4.0
【发布时间】:2013-07-20 21:15:37
【问题描述】:

我刚开始学习字符串模板,我遇到了这里显示的示例:

group simple;
vardef(type,name) ::= "<type> <name>;"

method(type,name,args) ::= <<
  <type> <name>(<args; separator=",">) {
      <statements; separator="\n">
  }
>>

我想要做的是将一个字符串模板作为参数传递给方法字符串模板,如下所示:

statements(function, arguments) ::= <<
    <function>(<arguments; separator=",">);
>>

 method(type,name,args, <statements> ) ::= <<
     <type> <name>(<args; separator=",">) {
     <statements; separator="\n">
  }
>>

但是那没有成功,所以我猜它不可能将字符串模板传递给字符串模板? 那么语句是如何填充的呢?

尝试此操作时出现以下错误:

mytemplate.stg 14:26: invalid character '<'
mytemplate.stg 14:36: invalid character '>'

【问题讨论】:

    标签: stringtemplate stringtemplate-4


    【解决方案1】:

    我在 C# 中使用 stringtemplate 4,并且在创建通用“分隔”模板时遇到了同样的问题,该模板将接受集合、每个项目上的映射操作(匿名模板)和分隔符(也匿名模板)。模板参数工作,但我无法让参数传递机制工作;相反,我不得不依赖动态范围和调用者上下文中存在的名为 item 的变量。

    NormalGet(schema, table) ::= <<
    CREATE PROCEDURE [<schema.Name>].[Get<table.Name>] 
        <Delimit(items = table.Cols, itemTransformer = {@<item.Name> <item.ListType> readonly},     delimiter = ",\n")>
    AS
    BEGIN
    END
    >>
    

    和定界:

    Delimit(items, itemTransformer, delimiter) ::= <<
    <trunc(items): { item | <itemTransformer><delimiter>} ><last(items): { item |<itemTransformer> } >
    >>
    

    给了我类似的东西:

    CREATE PROCEDURE [data].[GetCluster] 
        @idCluster common.intList readonly,
        @Name common.varcharList readonly,
        @Category common.varcharList readonly,
        @DisplayOrder common.intList readonly,
        @IsEditable common.bitList readonly 
    AS
    BEGIN
    END
    

    我想做的是将我对 Delimit 的调用替换为以下内容:

        <Delimit(items = table.Cols, itemTransformer = {col | @<col.Name> <col.ListType> readonly},     delimiter = ",\n")>
    

    但我无法计算出它的语法,或者它是否可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      相关资源
      最近更新 更多