90 lines
3.1 KiB
Plaintext
90 lines
3.1 KiB
Plaintext
|
|
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 are supported.
|
|
|
|
* '=' 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 supported
|
|
- const is not supported
|
|
- signed and unsigned are not supported.
|
|
- arrays are supported
|
|
- long doubles are not supported
|
|
- structs and unions are supported
|
|
- typedef is supported
|
|
- explicit storage class specifiers are not supported: register, auto, static, extern
|
|
|
|
- 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.
|
|
- Macro recursion is allowed.
|
|
- Self-referential macros are handled as in gcc.
|
|
- '#pragma' is supported. The pragma text is passed to a callback function,
|
|
and is used to implement meta-information.
|
|
- 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).
|
|
|