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).
 | |
| 
 | 
