blob: 97a876d9e35ddb4e37f7941ec89dabcd935d794b [file] [log] [blame]
Supported C language subset:
- Expressions:
* binary operators, by decreasing priority order: '*' '/' '%',
'+' '-', '>>' '<<', '<' '<=' '>' '>=', '==' '!=', '&',
'^', '|', '=', '&&', '||'.
* '&&' and '||' have the same semantics as C : left to right
evaluation and early exit.
* Parenthesis are supported.
* Comma operator is supported.
* Trinary operator (?:) is not supported.
* Unary operators: '&', '*' (pointer indirection), '-'
(negation), '+', '!', '~', '++' and '--'.
* Pointer indirection ('*') is supported.
* Square brackets can be used for pointer arithmetic.
* '=' and <op>= are supported.
* Function calls are supported with standard Linux calling
convention. Function pointers are supported.
Functions can be used before being declared.
- sizeof() is not supported.
- Types:
+ int, short, char, float, double
+ pointers
+ variables can be initialized in declarations.
+ Only ANSI-style function declarations are supported.
- "..." is not supported.
- short is not supported
- const is not supported
- arrays are not supported
- long doubles are not supported
- structs are not supported
- Unknown functions and variables are bound at compile time by calling
back to the caller. For the 'acc' command-line tool unknown functions
and variables are looked up using dlsym, to allow using many libc
functions and variables.
- Instructions: blocks ('{' '}') are supported as in C. 'if' and
'else' can be used for tests. The 'while' and 'for' C constructs
are supported for loops. 'break' can be used to exit
loops. 'return' is used for the return value of a function.
- switch / case is not supported.
- goto and labels are not supported.
- continue is not supported.
- Identifiers are parsed the same way as C. Local variables are
handled, but there is no local name space (not a problem if
different names are used for local and global variables).
- Numbers can be entered in decimal, hexadecimal ('0x' or '0X'
prefix), or octal ('0' prefix).
- Float and double constants are supported.
- '#define' is supported without function like arguments. No macro
recursion is tolerated. Other preprocessor directives are
ignored.
- C Strings and C character constants are supported. All ANSI C
character escapes are supported.
- Both C comments ( /* */ ) and C++ comments ( // ... end-of-line ) are
supported.
- Some syntax errors are reported, others may cause a crash.
- Memory: the code, data, and symbol sizes are limited to 100KB
(it can be changed in the source code).