2013-07-20 1 views
0

임에 문자열 템플릿을 삽입하는 방법 : 내가하고 싶은 것은 같은 stringtemplate에서 패스단지 문자열 템플릿을 배우고 여기에 표시된 예를 건너 필자 시작하는 다른 문자열 템플릿 ST 4.0

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

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

입니다 메소드 stringtemplate에 대한 인수는 다음과 같이

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

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

그러나 그 didnt 한이 stringtemplates하는 stringtemplates을 통과하기 위해 수없는 추측 메신저 그래서 운동? 그런 다음 명령문을 채우는 방법은 무엇입니까? 일반적인 "구분"템플릿을 생성 할 때 매개 변수로 받아 들일 것이다 나는 C 번호와 stringtemplate 4를 사용하고

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

답변

2

과 내가 같은 문제로 실행 :이 시도 할 때

는 나는 다음과 같은 오류가 발생합니다 컬렉션, 각 항목에 대한 맵 작업 (익명 템플릿) 및 구분 기호 (익명 템플릿)가 포함됩니다. 템플릿 매개 변수는 작동하지만 매개 변수 전달 메커니즘을 사용할 수 없습니다. 대신 동적 범위 지정과 호출자의 컨텍스트에 존재하는 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 = table.Cols, itemTransformer = {col | @<col.Name> <col.ListType> readonly},  delimiter = ",\n")> 
: 내가하고 싶은 것이

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(items, itemTransformer, delimiter) ::= << 
<trunc(items): { item | <itemTransformer><delimiter>} ><last(items): { item |<itemTransformer> } > 
>> 

나에게 뭔가를 제공합니다

하지만 운동하지 못합니다. 그는 그것을 위해 또는 가능하다면 그것을 문법화한다.

관련 문제