- The $[...] expressions have been enhanced to include the ==,
![$\vert$](img8.png)
,
and && operators. These operators are exactly equivalent to the
=,
, and & operators, respectively. Why? So the C, Java, C++
hackers feel at home here.
- It is more free-form. The newline character means very little,
and is pulled out of the white-space only for line numbers in
error messages.
- It generates more error messages - by this I mean that any
difference between the input and the grammar are reported, by
file, line number, and column.
- It checks the contents of $[ ] expressions (or what will end up
being $[ ] expressions!) for syntax errors. It also does
matching paren/bracket counts.
- It runs several semantic checks after the parsing is over, but
before the compiling begins, see the list above.
- It handles #include "filepath" directives. - ALMOST
anywhere, in fact. You could easily include a file in a context,
in an extension, or at the root level. Files can be included in
files that are included in files, down to 50 levels of hierarchy...
- Local Goto's inside Switch statements automatically have the
extension of the location of the switch statement appended to them.
- A pretty printer function is available within pbx_ael.so.
- In the utils directory, two standalone programs are supplied for
debugging AEL files. One is called "aelparse", and it reads in
the /etc/asterisk/extensions.ael file, and shows the results of
syntax and semantic checking on stdout, and also shows the
results of compilation to stdout. The other is "aelparse1",
which uses the original ael compiler to do the same work,
reading in "/etc/asterisk/extensions.ael", using the original
'pbx_ael.so' instead.
- AEL supports the "jump" statement, and the "pattern" statement
in switch constructs. Hopefully these will be documented in the
AEL README.
- Added the "return" keyword, which will jump to the end of an
extension/Macro.
- Added the ifTime (
time range![$>$](img1.png)
![$\vert$](img8.png)
days of week![$>$](img1.png)
![$\vert$](img8.png)
days of
month![$>$](img1.png)
![$\vert$](img8.png)
months
) [else ] construct, which executes much
like an if () statement, but the decision is based on the
current time, and the time spec provided in the ifTime. See the
example above. (Note: all the other time-dependent Applications
can be used via ifTime)
- Added the optional time spec to the contexts in the includes
construct. See examples above.
- You don't have to wrap a single "true" statement in curly
braces, as in the original AEL. An "else" is attached to the
closest if. As usual, be careful about nested if statements!
When in doubt, use curlies!
- Added the syntax [regexten] [hint(channel)] to precede an
extension declaration. See examples above, under
"Extension". The regexten keyword will cause the priorities in
the extension to begin with 2 instead of 1. The hint keyword
will cause its arguments to be inserted in the extension under
the hint priority. They are both optional, of course, but the
order is fixed at the moment- the regexten must come before the
hint, if they are both present.
- Empty case/default/pattern statements will "fall thru" as
expected. (0.6)
- A trailing label in an extension, will automatically have a
NoOp() added, to make sure the label exists in the extension on
Asterisk. (0.6)
- (0.9) the semicolon is no longer required after a closing brace!
(i.e. "];" ===
"}". You can have them there if you like, but
they are not necessary. Someday they may be rejected as a syntax
error, maybe.
- (0.9) the // comments are not recognized and removed in the
spots where expressions are gathered, nor in application call
arguments. You may have to move a comment if you get errors in
existing files.
- (0.10) the random statement has been added. Syntax: random (
expr
)
lucky-statement
[ else
unlucky-statement
]. The
probability of the lucky-statement getting executed is
expr
,
which should evaluate to an integer between 0 and 100. If the
lucky-statement
isn't so lucky this time around, then the
unlucky-statement
gets executed, if it is present.
lmadsen
2010-01-14