SDA SE Wiki

Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering

User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
research:jtransformer:api:java:pefs:4.0:identt [2017/08/31 18:12]
127.0.0.1 external edit
research:jtransformer:api:java:pefs:4.0:identt [2018/05/09 01:59] (current)
Line 1: Line 1:
 +{{page>​prologast_bodypef_index&​fullpage&​nofooter}}
  
 +----
 +
 +=== identT(#id, #parent, #encl, #​symbol) ​ ===
 +
 +Represents an access to
 +  - a method parameter or
 +  - a local variable or
 +  - '​this'​ or
 +  - '​super' ​
 +
 +<​note>​
 +Note that identT represents **no field accesses**. Field accesses are represented by [[fieldAccessT|fieldAccessT]]. ​
 +</​note>​
 +
 +== Changes in JTransformer 4.0 ==
 +  * Removed "​name"​ argument
 +  * The access to the Java constant '​null'​ is not longer represented as an identT but as a [[literalT|literalT]]
 +  * In JTransformer versions < 2.6.0 identT also represented class literals, and qualified type names. Class literals are now modeled with [[selectT|selectT]]. Qualified type names in static method calls and static field accesses are now represented with [[staticTypeRefT|staticTypeRefT]].
 +
 +
 +
 +=== Arguments ===
 +== ==
 +**#id:** id\\ 
 +the unique ID assigned to this fact.
 +
 +**#​parent:​** id\\ 
 +ID of the parent node.
 +
 +**#encl:** [[methodT|methodT]],​ [[constructorT|constructorT]],​ [[classInitializerT|classInitializerT]],​ [[fieldt|fieldT]]\\ ​
 +ID of the fact that represents the method, constructor,​ class initializer or field definition that contains this (pseudo-)variable access.
 +
 +**#​symbol:​** [[localt|localT]],​ [[paramt|paramT]],​ [[classt|classT]] \\
 +ID of the referenced local variable, parameter or class.  ​
 +  * The access to '​super'​ references as symbol the ID of the superclass. ​
 +  * The access to '​this'​ references the ID of the class of which '​this'​ is an instance:
 +
 +<Code lang-prolog>​
 + ​identT(...,​ ..., ..., '​null'​). ​         % access to '​null'​
 + ​identT(...,​ ..., ..., #​idOfParamT). ​    % access to parameter
 + ​identT(...,​ ..., ..., #​idOfLocalT). ​    % access to local var
 + ​identT(...,​ ..., ..., #​idOfSuperclass). % access to '​super'​
 + ​identT(...,​ ..., ..., #​idOfOwnClass). ​  % access to '​this'​
 +</​Code>​
 +
 +An access to '​super'​ that refers to the superclass Class is detected by 
 +<Code lang-prolog>​
 +access_to_super(Id,​Class) :-
 +  identT(Id, _, _, Class), ​              % an identifier
 +  classT(Class,​ _,​_,​_), ​                 % that references a class
 +  not( ast_ancestor(Id,​ Class)). ​        % that does not contain the identifier
 +</​Code>​
 +
 +An explicit access to '​this'​ in class Class is detected by 
 +<Code lang-prolog>​
 +access_to_this(Id,​Class) :-
 +  identT(Id, _, _, Class), ​              % an identifier
 +  classT(Class,​ _,​_,​_), ​                 % that references a class
 +  ast_ancestor(Id,​ Class). ​              % that contains the identifier
 +</​Code>​
 +
 +
 +==== Sample Java Code ===
 +==  ==
 +<Code lang-java>​
 +public Object m(int i) {
 + int j=0;
 +        ...
 +        x = i + j;
 +        ...
 +        Object o = super.abc;
 +        ...
 +        return this;
 +}
 +</​Code>​
 +
 +
 +=== Its PEF Representation ===
 +For better readability IDs are represented by symbolic constants prefixed with #.
 +==  ==
 +<Code lang-prolog>​
 +methodT(#​encl,​ ..., '​m',​ [], #​refToObject,​ [], ...).
 +  paramT(#​symbol1,​ ..., #refToInt, '​i'​).
 +  localT(#​symbol2,​ ..., #encl, #refToInt, '​j',​ ...).
 +...
 +operationT(#​parent,​ ..., #encl, [#id1, #id2], '​+',​ 0).
 +  identT(#​id1,​ #parent, #encl, #symbol1).
 +  identT(#​id2,​ #parent, #encl, #symbol2).
 +...
 +localT(#​symbol3,​ ..., #encl, #​refToObject,​ '​o',​ #get).
 +  getFieldT(#​get,​ #symbol3, #encl, #id3, abc, #abc).
 +    identT(#​id3,​ #get, #encl, #​superclass).
 +
 +...
 +returnT(#​retid,​ ..., #encl, #ident).
 +  identT(#​ident,​ #retid, #encl, #​classOfThis).
 +</​Code>​
 +
 +=== AST Specification ===
 +== ==
 +<​Code>​
 +ast_node_type_spec(identT,​[
 +     ​ast_arg(id, ​     mult(1,1,no ), id,  [identT]),
 +     ​ast_arg(parent, ​ mult(1,1,no ), id,  [id]), ​
 +     ​ast_arg(encl, ​   mult(1,1,no ), id,  [methodT, constructorT,​ classInitializerT,​ fieldT]), ​
 +     ​ast_arg(ref, ​    ​mult(1,​1,​no ), id,  [classT,​localT,​paramT]) ​
 +]).
 +</​Code>​
research/jtransformer/api/java/pefs/4.0/identt.txt · Last modified: 2018/05/09 01:59 (external edit)

SEWiki, © 2019