2012-03-29 7 views
3

ANTLRとStringTemplateライブラリを使用してC#コードジェネレータを開発しようとしています。 AntlrWorksは、エラーを報告することなく、C#パーサーおよびレクサーファイルを生成することができます。ただし、C#パーサーコードは無効であり、Visual Studioでコンパイルできません。無効なC#コードを生成するAntlr文法

誰でも次の文法が間違っているのを見ることができますか?

grammar StrucadShape; 

options { 
    language=CSharp3 ; 
    output=template; 

} 

@header {using System;} 
@lexer::header {using System;} 
@lexer::members {const int HIDDEN = Hidden;} 

/*------------------------------------------------------------------ 
* PARSER RULES 
*------------------------------------------------------------------*/ 

public shapedef: parameters_def 
        -> class_temp(parameters={$parameters_def.st}) 
        ; 

parameters_def : (PARAMETERS LPAREN (p+=param) (COMMA (p+=param))* RPAREN) 
        -> parameter_list(params={$p}) 
        ; 

param : IDENTIFIER ->Parameter_decl(p={$IDENTIFIER.text}); 

/*------------------------------------------------------------------ 
* LEXER RULES 
*------------------------------------------------------------------*/  

fragment EOL:'\r'|'\n'|'\r\n' ; 


WS : (' ' 
| '\t' 
| EOL) 
{ $channel = HIDDEN; } ;  

PARAMETERS: 'PARAMETERS'; 
    COMMA : ',' ; 
    LPAREN : '(' ; 
    RPAREN : ')' ; 

fragment LETTER :('A'..'Z' | 'a'..'z'); 
IDENTIFIER: LETTER (LETTER|DIGIT)*; 
INTEGER : (DIGIT)+ ; 
FLOAT : (DIGIT)+'.'(DIGIT)+; 
fragment DIGIT : '0'..'9' ; 

これは、生成parameters_def()メソッド

List<object> list_p = null; 

...snipped some code 

if (list_p==null) list_p=new List<StringTemplate>(); 

これはList<Object>を入力するList <StringTemplate>の割り当てに失敗しているのコードの次の行になります。 文字列テンプレートルールを追加する前に文法が機能します。このエラーは、StringTemplateライブラリのリスト処理に必要な構文(p+=param)を追加したときに発生します。

完全性のためにStringTemplateファイルを追加しますが、実行時までロードされていないため、このエラーが発生する可能性はありません。私が上で、関連する問題を発見した

group StrucadShape; 

Parameter_decl(p)::= "public double <p> { get; set; }" 

parameter_list(params) ::= 
<< 
start expressions 
<params; separator="\n"> 
end 
>> 

class_temp( parameters)::= 
<< 
public class name 
{ 
    <parameters; separator="\n> 
} 
>> 

サンプル入力文字列PARAMETERS(D,B,T)

ANTLRのバージョン

  • Antlr3.Runtime 3.4.1.9004
  • AntlrWorks 1.4.3

答えて

2

Antlrメーリングリストhere

ソリューションは、ソリューションを投稿するための文法オプション

クール
+0

、感謝にASTLabeltypeを追加しました! –

関連する問題