Другое: Грамматики языков Си и С++
Описание
Характеристики учебной работы
Список файлов
- Грамматики языков Си и С++
- Грамматика С++.zip 11,29 Kb
- Грамматика Си под yacc
- ANSI C grammar (Lex).htm 9,76 Kb
- ANSI C grammar (Yacc).htm 37,31 Kb
- C_grammar_old.txt 12,85 Kb
- Прочти меня!!!.txt 136 b
COMPILER translation_unit
//====================================== ======================================== ===========================CHARACTERS=== ==========
CHARACTERS
tab = '\t' .
cr = '\r' .
lf = '\n' .
//====================================== ======================================== ===========================TOKENS======= ==========
TOKENS
//====================================== =====SYMBOLS================
D = [0-9] .
L = [a-zA-Z_] .
H = [a-fA-F0-9] .
E = [Ee][+-]?{D}+ .
FS = (f|F|l|L) .
IS = (u|U|l|L)* .
//====================================== =====KEY=WORDS==============
AUTO = "auto" .
BREAK = "break" .
CASE = "case" .
CHAR = "char" .
CONST = "const" .
CONTINUE = "continue" .
DEFAULT = "default" .
DO = "do" .
DOUBLE = "double" .
ELSE = "else" .
ENUM = "enum" .
EXTERN = "extern" .
FLOAT = "float" .
FOR = "for" .
GOTO = "goto" .
IF = "if" .
INT = "int" .
LONG = "long" .
REGISTER = "register" .
RETURN = "return" .
SHORT = "short" .
SIGNED = "signed" .
SIZEOF = "sizeof" .
STATIC = "static" .
STRUCT = "struct" .
SWITCH = "switch" .
TYPEDEF = "typedef" .
UNION = "union" .
UNSIGNED = "unsigned" .
VOID = "void" .
VOLATILE = "volatile" .
WHILE = "while" .
//====================================== =====IDENTIFIER=============
IDENTIFIER = {L}({L}|{D})* .
//====================================== =====CONSTANTS==============
CONSTANT = 0[xX]{H}+{IS}? .
CONSTANT = 0{D}+{IS}? .
CONSTANT = {D}+{IS}? .
CONSTANT = L?'(\\.|[^\\'])+' .
CONSTANT = {D}+{E}{FS}? .
CONSTANT = {D}*"."{D}+({E})?{FS}? .
CONSTANT = {D}+"."{D}*({E})?{FS}? .
//====================================== =====STRING=LITERAL=========
STRING_LITERAL = L?\"(\\.|[^\\"])*\".
//====================================== =====KEY=SIGNES=============
ELLIPSIS = "..." .
RIGHT_ASSIGN = ">>=" .
LEFT_ASSIGN = "<<=" .
ADD_ASSIGN = "+=" .
SUB_ASSIGN = "-=" .
MUL_ASSIGN = "*=" .
DIV_ASSIGN = "/=" .
MOD_ASSIGN = "%=" .
AND_ASSIGN = "&=" .
XOR_ASSIGN = "^=" .
OR_ASSIGN = "|=" .
RIGHT_OP = ">>" .
LEFT_OP = "<<" .
INC_OP = "++" .
DEC_OP = "--" .
PTR_OP = "->" .
AND_OP = "&&" .
OR_OP = "||" .
LE_OP = "<=" .
GE_OP = ">=" .
EQ_OP = "==" .
NE_OP = "!=" .
';' = ";" .
'{' = ("{"|"<%") .
'}' = ("}"|"%>") .
',' = "," .
':' = ":" .
'=' = "=" .
'(' = "(" .
')' = ")" .
'[' = ("["|"<:") .
']' = ("]"|":>") .
'.' = "." .
'&' = "&" .
'!' = "!" .
'~' = "~" .
'-' = "-" .
'+' = "+" .
'*' = "*" .
'/' = "/" .
'%' = "%" .
'<' = "<" .
'>' = ">" .
'^' = "^" .
'|' = "|" .
'?' = "?" .
//====================================== ======================================== ===========================COMMENTS===== ==========
COMMENTS FROM "/*" TO "*/" NESTED
COMMENTS FROM "//" TO lf
//====================================== ======================================== ===========================IGNORE======= ==========
IGNORE tab + cr + lf
//====================================== ======================================== ===========================PRODUCTIONS== ==========
PRODUCTIONS
primary_expression =
IDENTIFIER
| CONSTANT
| STRING_LITERAL
| '(' expression ')'
.
postfix_expression =
primary_expression
| postfix_expression '[' expression ']'
| postfix_expression '(' ')'
| postfix_expression '(' argument_expression_list ')'
| postfix_expression '.' IDENTIFIER
| postfix_expression PTR_OP IDENTIFIER
| postfix_expression INC_OP
| postfix_expression DEC_OP
.
argument_expression_list =
assignment_expression
| argument_expression_list ',' assignment_expression
.
unary_expression =
postfix_expression
| INC_OP unary_expression
| DEC_OP unary_expression
| unary_operator cast_expression
| SIZEOF unary_expression
| SIZEOF '(' type_name ')'
.
unary_operator =
'&'
| '*'
| '+'
| '-'
| '~'
| '!'
.
cast_expression =
unary_expression
| '(' type_name ')' cast_expression
.
multiplicative_expression =
cast_expression
| multiplicative_expression '*' cast_expression
| multiplicative_expression '/' cast_expression
| multiplicative_expression '%' cast_expression
.
additive_expression =
multiplicative_expression
| additive_expression '+' multiplicative_expression
| additive_expression '-' multiplicative_expression
.
shift_expression =
additive_expression
| shift_expression LEFT_OP additive_expression
| shift_expression RIGHT_OP additive_expression
.
relational_expression =
shift_expression
| relational_expression '<' shift_expression
| relational_expression '>' shift_expression
| relational_expression LE_OP shift_expression
| relational_expression GE_OP shift_expression
.
equality_expression =
relational_expression
| equality_expression EQ_OP relational_expression
| equality_expression NE_OP relational_expression
.
and_expression =
equality_expression
| and_expression '&' equality_expression
.
exclusive_or_expression =
and_expression
| exclusive_or_expression '^' and_expression
.
inclusive_or_expression =
exclusive_or_expression
| inclusive_or_expression '|' exclusive_or_expression
.
logical_and_expression =
inclusive_or_expression
| logical_and_expression AND_OP inclusive_or_expression
.
logical_or_expression =
logical_and_expression
| logical_or_expression OR_OP logical_and_expression
.
Файл скачан с сайта StudIzba.com
При копировании или цитировании материалов на других сайтах обязательно используйте ссылку на источник
Начать зарабатывать