2016-12-06 1 views
1

私は解析中にコメントを避ける方法を探しています。ここに私の問題がある。コメントのないラスカルフェッチメソッド

まず、私はそうのように、M3モデルからすべてのメソッドをフェッチ:

public set[loc] getMethodLocations(M3 model){ 
    locations = { <x,y> | <x,y> <- [email protected], 
    x.scheme=="java+class", 
    y.scheme=="java+method" || 
    y.scheme=="java+constructor" }; 
    set[loc] methodLocations = { a | a <- range(locations) }; 
    return methodLocations; 
} 

は、それから私は、フェッチされた場所を反復そうようにしたい:

set[loc] AllMethodsAsLoc = getMethodLocations(model); 

for(methodAsLoc <- AllMethodsAsLoc) { 
    MethodDec m = parse(#MethodDec, methodAsLoc); 
}; 

私の問題は、構文解析ということですフェッチされたメソッドがその場所にコメントを持つとき、ParseErrorで失敗するようです。フェッチ時にコメントを挿入しないでください。また、解析中にコメントを無視する方法はありますか?

私はこれで新しいですし、学ぶので、私の無知を許してください。

何か助けていただければ幸いです。

ロブ

答えて

1

優秀な質問です。 MethodDecは、非終端記号の "開始"ではないので、実際のMethodDecの前後の空白やコメントは受け入れられません。だから何とか空白を切り捨てるか、または新しい非終端記号を作ることができます。はレイアウトを受け入れます。

後者の解決策が良い私見です:

start syntax MyTop = MethodDec method; 

start[MyTop] theTop = parse(start[MyTop], methodAsLoc); 
MyTop t = theTop.top 
MethodDec dec = t.method; 

// or more directly 
dec = parse(start[MyTop], methodAsLoc).top.method; 
+0

はjurgnvありがとうございます。これはまさに私が必要とした解決策でした。素晴らしい。 – Rob

+1

これは読んだり読んだりしたりするのに使う。このソリューションはメソッドに対してのみ機能することに注意してください。コードサンプルもコンストラクタをフェッチするので、コンストラクタも処理するために次のコードを追加する必要がありました: 'syntax MyMethod = MethodDec | ConstrDec; ' @jurgenvによる問題の解決法: 'MyTop = MyMethod method;を開始する '変数を宣言し、それを次のように解析する:' MyMethod m = parse(#start [MyTop]、method).top.method; ' – Rob

関連する問題