From c857f0b02463f4b0bc8100434eecdd46ce2ecbd1 Mon Sep 17 00:00:00 2001 From: xleroy Date: Wed, 16 Oct 2013 09:50:38 +0000 Subject: Cminor parsing and printing (from Andrew Tolmach) git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2345 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- backend/CMlexer.mll | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'backend/CMlexer.mll') diff --git a/backend/CMlexer.mll b/backend/CMlexer.mll index 4083c95..c400c5e 100644 --- a/backend/CMlexer.mll +++ b/backend/CMlexer.mll @@ -37,13 +37,18 @@ rule token = parse | "/*" { comment lexbuf; token lexbuf } | "absf" { ABSF } | "&" { AMPERSAND } + | "&l" { AMPERSANDL } | "!" { BANG } | "!=" { BANGEQUAL } | "!=f" { BANGEQUALF } + | "!=l" { BANGEQUALL } + | "!=lu" { BANGEQUALLU } | "!=u" { BANGEQUALU } | "|" { BAR } + | "|l" { BARL } | "builtin" { BUILTIN } | "^" { CARET } + | "^l" { CARETL } | "case" { CASE } | ":" { COLON } | "," { COMMA } @@ -52,23 +57,34 @@ rule token = parse | "=" { EQUAL } | "==" { EQUALEQUAL } | "==f" { EQUALEQUALF } + | "==l" { EQUALEQUALL } + | "==lu" { EQUALEQUALLU } | "==u" { EQUALEQUALU } | "exit" { EXIT } | "extern" { EXTERN } | "float" { FLOAT } | "float32" { FLOAT32 } | "float64" { FLOAT64 } + | "float64al32" { FLOAT64AL32 } | "floatofint" { FLOATOFINT } | "floatofintu" { FLOATOFINTU } + | "floatoflong" { FLOATOFLONG } + | "floatoflongu" { FLOATOFLONGU } | "goto" { GOTO } | ">" { GREATER } | ">f" { GREATERF } + | ">l" { GREATERL } + | ">lu" { GREATERLU } | ">u" { GREATERU } | ">=" { GREATEREQUAL } | ">=f" { GREATEREQUALF } + | ">=l" { GREATEREQUALL } + | ">=lu" { GREATEREQUALLU } | ">=u" { GREATEREQUALU } | ">>" { GREATERGREATER } | ">>u" { GREATERGREATERU } + | ">>l" { GREATERGREATERL } + | ">>lu" { GREATERGREATERLU } | "if" { IF } | "in" { IN } | "inline" { INLINE } @@ -77,32 +93,48 @@ rule token = parse | "int16s" { INT16S } | "int16u" { INT16U } | "int32" { INT32 } + | "int64" { INT64 } | "int8" { INT8 } | "int8s" { INT8S } | "int8u" { INT8U } | "intoffloat" { INTOFFLOAT } | "intuoffloat" { INTUOFFLOAT } + | "intoflong" { INTOFLONG } | "{" { LBRACE } | "{{" { LBRACELBRACE } | "[" { LBRACKET } | "<" { LESS } | "" { MINUSGREATER } | "-f" { MINUSF } + | "-l" { MINUSL } | "%" { PERCENT } + | "%l" { PERCENTL } + | "%lu" { PERCENTLU } | "%u" { PERCENTU } | "+" { PLUS } | "+f" { PLUSF } + | "+l" { PLUSL } | "}" { RBRACE } | "}}" { RBRACERBRACE } | "]" { RBRACKET } @@ -112,18 +144,25 @@ rule token = parse | ";" { SEMICOLON } | "/" { SLASH } | "/f" { SLASHF } + | "/l" { SLASHL } + | "/lu" { SLASHLU } | "/u" { SLASHU } + | "single" { SINGLE } | "stack" { STACK } | "*" { STAR } | "*f" { STARF } + | "*l" { STARL } | "switch" { SWITCH } | "tailcall" { TAILCALL } | "~" { TILDE } + | "~l" { TILDEL } | "var" { VAR } | "void" { VOID } | "volatile" { VOLATILE } | "while" { WHILE } + | intlit"LL" { let s = Lexing.lexeme lexbuf in + LONGLIT(Int64.of_string(String.sub s 0 (String.length s - 2))) } | intlit { INTLIT(Int32.of_string(Lexing.lexeme lexbuf)) } | floatlit { FLOATLIT(float_of_string(Lexing.lexeme lexbuf)) } | stringlit { let s = Lexing.lexeme lexbuf in -- cgit v1.2.3