User Tools

Site Tools


Sidebar

<menu col=1,align=center>

<item>Documentation||[[lara:documentation]]|{{:lara:img:dictionary.png?25}}</item>
<item>Downloads||[[lara:downloads]]| {{:lara:img:projects.png?25}}</item>
<item>Tutorials||[[lara:tutorial]]|{{:lara:img:books.png?25}}</item>
<item>Other uses of LARA||[[lara:other]]|{{:lara:img:globe.png?25}}</item>
<item>About Us||[[https://sites.google.com/site/specsfeup/]]| {{:lara:img:specslogo.png?25}}</item>
<item>Projects||[[lara:usage]]| {{:lara:img:math.png?25}}</item>

</menu>

/* They are empty */ /* <item>FAQ||faq|</item> */ /* <item>Dev. Team||team| </item> */ /* <item>About LARA||about|</item> */

lara:docs:specs3

This is an old revision of the document!


LARA Language Specification 3.0

(check another language specification - e.g., Java - and see the kind of structure that is used)

Weaver Specification

(new language for Weaver Specification; explain syntax; 'functions' instead of 'attributes')

Joinpoint Functions

(change 'attribute' to 'function')

Joinpoint Actions

(recommended syntax: $jp.exec <action_name>. Could it be $jp.action <action_name> instead?)

Default Actions

There are several actions that are defined by default in the LARA language.

Action Insert

  • only supports before/after, around/replace removed
  • granularity is statement level
  • Consider supporting joinpoints as input, instead of only literal text

Action Replace

(granularity is node itself)

Aspect Calls

(recommended syntax: var a = new Aspect(); call a;)

Tools ('run')

(independent of weaver)

Generic Command ('cmd')

Should return: → executionTime → stdOut → stdErr → exitStatus

Tool Report

(Should return the same as 'cmd', additionally can define a report)

Dispute

Parts of the language that have not been decided yet and are still under discussion

Selecting Children vs Descendants

Currently LARA has no way to define when we do a 'select', if we want just the direct joinpoints under it (e.g., children) or all its descendants.

E.g., select body.loop end will recursively return all the loops inside the body, there is no simple way to select only the loops that are directly under the body (excluding nested loops).

*Tentative solution*

Add joinpoints specifically for direct children selection. 'select function.stmt' selects all statements, 'select function.childStmt' selects only the direct children of the function.

Insert Order

It is not defined the order of consecutive calls to insert before/after. If we do:

select a end
  $a.insert before 'before_1';
  $a.insert after 'after_1';
  $a.insert before 'before_2';
  $a.insert after 'after_2';
end

Should it appear like this:

'before_2'
'before_1'
a
'after_1'
'after_2'

Or like this?

'before_1'
'before_2'
a
'after_2'
'after_1'

*Tentative Solution*

Always insert the closest possible to the node. For the previous example, this means that the insertion order would be like:

'before_1'
'before_2'
a
'after_2'
'after_1'

String Literals

Currently, the preferred way to do String literals in LARA is to use quotes:

'a string in LARA'

LARA also supports double quotes, but they are internally translated to single quotes, so there can be problems when using quote literals:

“a string with a quote ' ” → 'a string with a quote ' '

We can 1) normalize on the LARAC side and escape the quote or 2) identify the type of String (' or “) and generate code accordingly

'exit' Joinpoint in 'scope'/'body'

Should the joinpoint 'scope' be able to select its 'exit' points? This joinpoint would represent all the static exits that can be detected in the code (e.g., end of scope, return statements, throw statements).

Possible problems: - When a scope does not explicitly return (equivalent to the $body.insert when $body is empty); - We cannot detect dynamic exits, from exceptions, for instance (is this relevant?) - When a return statement has computation (e.g., return a+2), the $exit.insert before does not have this computation into account (possible solution, LARA action that extracts computation from returns to a variable, e.g., lara_temp_1 = a + 2; return lara_temp_1;)

Insert Begin/End in 'scope'/'body'

lara/docs/specs3.1496409319.txt.gz · Last modified: 2019/09/22 15:46 (external edit)