From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA16193; Sun, 22 Jul 2001 10:13:29 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA16183 for caml-list@pauillac.inria.fr; Sun, 22 Jul 2001 10:13:29 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id XAA11713 for ; Sat, 21 Jul 2001 23:03:39 +0200 (MET DST) Received: from carbon.btinternet.com (carbon.btinternet.com [194.73.73.92]) by nez-perce.inria.fr (8.11.1/8.10.0) with ESMTP id f6LL3c112456 for ; Sat, 21 Jul 2001 23:03:38 +0200 (MET DST) Received: from [213.123.25.148] (helo=genesis1) by carbon.btinternet.com with smtp (Exim 3.22 #9) id 15O3uQ-0004f8-00; Sat, 21 Jul 2001 22:03:35 +0100 From: "Serguei Ouklonski" To: Cc: Subject: [Caml-list] RE: parsing Java with ocamllex/yacc Date: Sat, 21 Jul 2001 22:05:28 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0000_01C11231.4018D030" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C11231.4018D030 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hi Here is Java 1.1 grammar for OCaml based on "Free Yacc-able Java(tm) grammar" (see http://home.inreach.com/bronikov/grammars) Grammar seems to be OK, except for "**/" end of comments (e.g. /** .... **/ ) Hope it will help Serguei ------=_NextPart_000_0000_01C11231.4018D030 Content-Type: application/octet-stream; name="java11_y.mly" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="java11_y.mly" %{ open List type primitive_type_t =3D Boolean | Char | Byte | Short | Int | Long | = Float | Double | Void | Qualified of string list %} %token OP_AND OP_OR OP_MOD OP_NOT OP_LNOT OP_GT OP_LT %token OP_ASSIGN SEMICOLON COLON RPAREN LPAREN RBRACK %token LBRACK MINUS OP_DIV ASTERISK PLUS RCBRACK LCBRACK %token OP_XOR OP_AIF COMMA PERIOD %token ABSTRACT %token BOOLEAN BREAK BYTE BYVALUE %token CASE CATCH CHAR CLASS CONST CONTINUE %token DEFAULT DO DOUBLE %token ELSE EXTENDS %token FINAL FINALLY FLOAT FOR %token GOTO %token IF IMPLEMENTS IMPORT INSTANCEOF INT INTERFACE %token LONG %token NATIVE NEW JNULL %token PACKAGE PRIVATE PROTECTED PUBLIC %token RETURN %token SHORT STATIC SUPER SWITCH SYNCHRONIZED %token THIS THROW THROWS TRANSIENT TRY %token VOID VOLATILE %token WHILE %token OP_INC OP_DEC %token OP_SHL OP_SHR OP_SHRR %token OP_GE OP_LE OP_EQ OP_NE %token OP_LAND OP_LOR %token OP_DIM %token ASS_MUL ASS_DIV ASS_MOD ASS_ADD ASS_SUB %token ASS_SHL ASS_SHR ASS_SHRR ASS_AND ASS_XOR ASS_OR %token IDENTIFIER=20 %token LITERAL %right OP_ASSIGN ASS_ADD ASS_SUB ASS_MUL ASS_DIV ASS_AND ASS_OR ASS_XOR = ASS_MOD ASS_SHL ASS_SHR ASS_SHRR %left BOOLEAN_IF %left OP_LOR %left OP_LAND %left OP_OR %left OP_AND %left OP_EQ OP_NE %left INSTANCEOF OP_LE OP_GE OP_LT OP_GT %left OP_SHR OP_SHL OP_SHRR %left PLUS MINUS %left ASTERISK OP_DIV OP_MOD %right INC_DEC LOGICAL_UNARY ARITHM_UNARY TYPE_CONV %left PERIOD LBRACK LPAREN %right OBJECT_ALLOC %token CAST FUTURE GENERIC INNER OPERATOR OUTER REST VAR %start compilation_unit %type compilation_unit %% type_specifier : type_name {1} | type_name dims {1} ; type_name : primitive_type {$1} | qualified_name {Qualified($1)} ; class_name_list : qualified_name { [ $1 ] } | class_name_list COMMA qualified_name {List.append $1 [ $3 ] } ; primitive_type : BOOLEAN { Boolean } | CHAR { Char } | BYTE { Byte } | SHORT { Short } | INT { Int } | LONG { Long } | FLOAT { Float } | DOUBLE { Double } | VOID { Void } ; semi_colons : SEMICOLON {1} | semi_colons SEMICOLON {1} ; compilation_unit : program_file { $1 } ; program_file : package_statement import_statements type_declarations {1} | package_statement import_statements {1} | package_statement type_declarations {1} | import_statements type_declarations {1} | package_statement {1} | import_statements {1} | type_declarations {$1} ; package_statement : PACKAGE qualified_name semi_colons {$2} ; type_declarations : type_declaration_opt_semi {$1} | type_declarations type_declaration_opt_semi {1} ; type_declaration_opt_semi : type_declaration {$1} | type_declaration semi_colons {1} ; import_statements : import_statement { [ $1 ] } | import_statements import_statement { List.append $1 [ $2 ] } ; import_statement : IMPORT qualified_name semi_colons {$2} | IMPORT qualified_name PERIOD ASTERISK semi_colons {List.append $2 = ["*"] } ; qualified_name : IDENTIFIER { [ $1 ] } | qualified_name PERIOD IDENTIFIER { List.append $1 [ $3 ] } ; type_declaration : class_header LCBRACK field_declarations RCBRACK {1} | class_header LCBRACK RCBRACK {$1} ; class_header : modifiers class_word IDENTIFIER extends interfaces {1} | modifiers class_word IDENTIFIER extends {1} | modifiers class_word IDENTIFIER interfaces {1} | class_word IDENTIFIER extends interfaces {1} | modifiers class_word IDENTIFIER {1} | class_word IDENTIFIER extends {1} | class_word IDENTIFIER interfaces {1} | class_word IDENTIFIER {1} ; modifiers : modifier {1} | modifiers modifier {1} ; modifier : ABSTRACT {1} | FINAL {1} | PUBLIC {1} | PROTECTED {1} | PRIVATE {1} | STATIC {1} | TRANSIENT {1} | VOLATILE {1} | NATIVE {1} | SYNCHRONIZED {1} ; class_word : CLASS {1} | INTERFACE {1} ; interfaces : IMPLEMENTS class_name_list {$2} ; field_declarations : field_declaration_opt_semi {1} | field_declarations field_declaration_opt_semi {1} ; field_declaration_opt_semi : field_declaration {1} | field_declaration semi_colons {1} ; field_declaration : field_variable_declaration SEMICOLON {1} | method_declaration {1} | constructor_declaration {1} | static_initializer {1} | non_static_initializer {1} | type_declaration {1} ; field_variable_declaration : modifiers type_specifier variable_declarators {1} | type_specifier variable_declarators {1} ; variable_declarators : variable_declarator {1} | variable_declarators COMMA variable_declarator {1} ; variable_declarator : declarator_name {1} | declarator_name OP_ASSIGN variable_initializer {1} ; variable_initializer : expression {1} | LCBRACK RCBRACK {1} | LCBRACK array_initializers RCBRACK {1} ; array_initializers : variable_initializer {1} | array_initializers COMMA variable_initializer {1} | array_initializers COMMA {1} ; method_declaration : modifiers type_specifier method_declarator throws method_body {1} | modifiers type_specifier method_declarator method_body {1} | type_specifier method_declarator throws method_body {1} | type_specifier method_declarator method_body {1} ; method_declarator : declarator_name LPAREN parameter_list RPAREN {1} | declarator_name LPAREN RPAREN {1} | method_declarator OP_DIM {1} ; parameter_list : parameter {1} | parameter_list COMMA parameter {1} ; parameter : type_specifier declarator_name {1} | FINAL type_specifier declarator_name {1} ; declarator_name : IDENTIFIER {1} | declarator_name OP_DIM {1} ; throws : THROWS class_name_list {$2} ; method_body : block {1} | SEMICOLON {1} ; constructor_declaration : modifiers constructor_declarator throws block {1} | modifiers constructor_declarator block {1} | constructor_declarator throws block {1} | constructor_declarator block {1} ; constructor_declarator : IDENTIFIER LPAREN parameter_list RPAREN {1} | IDENTIFIER LPAREN RPAREN {1} ; static_initializer : STATIC block {1} ; non_static_initializer : block {1} ; extends : EXTENDS type_name { [ $2 ] } | extends COMMA type_name { List.append $1 [ $3 ] } ; block : LCBRACK local_variable_declarations_and_statements RCBRACK {1} | LCBRACK RCBRACK {1} ; local_variable_declarations_and_statements : local_variable_declaration_or_statement {1} | local_variable_declarations_and_statements = local_variable_declaration_or_statement {1} ; local_variable_declaration_or_statement : local_variable_declaration_statement {1} | statement {1} ; local_variable_declaration_statement : type_specifier variable_declarators SEMICOLON {1} | FINAL type_specifier variable_declarators SEMICOLON {1} ; statement : empty_statement {1} | label_statement {1} | expression_statement SEMICOLON {1} | selection_statement {1} | iteration_statement {1} | jump_statement {1} | guarding_statement {1} | block {1} ; empty_statement : SEMICOLON {1} ; label_statement : IDENTIFIER COLON {1} | CASE constant_expression COLON {1} | DEFAULT COLON {1} ; expression_statement : expression {1} ; selection_statement : IF LPAREN expression RPAREN statement {1} | IF LPAREN expression RPAREN statement ELSE statement {1} | SWITCH LPAREN expression RPAREN block {1} ; iteration_statement : WHILE LPAREN expression RPAREN statement {1} | DO statement WHILE LPAREN expression RPAREN SEMICOLON {1} | FOR LPAREN for_init for_expr for_incr RPAREN statement {1} | FOR LPAREN for_init for_expr RPAREN statement {1} ; for_init : expression_statements SEMICOLON {1} | local_variable_declaration_statement {1} | SEMICOLON {1} ; for_expr : expression SEMICOLON {1} | SEMICOLON {1} ; for_incr : expression_statements {1} ; expression_statements : expression_statement {1} | expression_statements COMMA expression_statement {1} ; jump_statement : BREAK IDENTIFIER SEMICOLON {1} | BREAK SEMICOLON {1} | CONTINUE IDENTIFIER SEMICOLON {1} | CONTINUE SEMICOLON {1} | RETURN expression SEMICOLON {1} | RETURN SEMICOLON {1} | THROW expression SEMICOLON {1} | GOTO IDENTIFIER SEMICOLON {1} ; guarding_statement : SYNCHRONIZED LPAREN expression RPAREN statement {1} | TRY block finally {1} | TRY block catches {1} | TRY block catches finally {1} ; catches : catch {1} | catches catch {1} ; catch : catch_header block {1} ; catch_header : CATCH LPAREN type_specifier IDENTIFIER RPAREN {1} | CATCH LPAREN type_specifier RPAREN {1} ; finally : FINALLY block {1} ; primary_expression : qualified_name {1} | not_just_name {1} ; not_just_name : special_name {1} | new_allocation_expression {1} | complex_primary {1} ; complex_primary : LPAREN expression RPAREN {1} | complex_primary_no_parenthesis {1} ; complex_primary_no_parenthesis : LITERAL {1} | array_access {1} | field_access {1} | method_call {1} ; array_access : qualified_name LBRACK expression RBRACK {1} | complex_primary LBRACK expression RBRACK {1} ; field_access : not_just_name PERIOD IDENTIFIER {1} | real_postfix_expression PERIOD IDENTIFIER {1} | qualified_name PERIOD THIS {1} | qualified_name PERIOD CLASS {1} | primitive_type PERIOD CLASS {1} ; method_call : method_access LPAREN argument_list RPAREN {1} | method_access LPAREN RPAREN {1} ; method_access : complex_primary_no_parenthesis {1} | special_name {1} | qualified_name {1} ; special_name : THIS {1} | SUPER {1} | JNULL {1} ; argument_list : expression {1} | argument_list COMMA expression {1} ; new_allocation_expression : plain_new_allocation_expression {1} | qualified_name PERIOD plain_new_allocation_expression {1} ; plain_new_allocation_expression : array_allocation_expression {1} | class_allocation_expression {1} | array_allocation_expression LCBRACK RCBRACK {1} | class_allocation_expression LCBRACK RCBRACK {1} | array_allocation_expression LCBRACK array_initializers RCBRACK {1} | class_allocation_expression LCBRACK field_declarations RCBRACK {1} ; class_allocation_expression : NEW type_name LPAREN argument_list RPAREN %prec OBJECT_ALLOC {1} | NEW type_name LPAREN RPAREN %prec OBJECT_ALLOC {1} ; array_allocation_expression : NEW type_name dim_exprs dims {1} | NEW type_name dim_exprs {1} | NEW type_name dims {1} ; dim_exprs : dim_expr {1} | dim_exprs dim_expr {1} ; dim_expr : LBRACK expression RBRACK {1} ; dims : OP_DIM {1} | dims OP_DIM {1} ; postfix_expression : primary_expression {1} | real_postfix_expression {1} ; real_postfix_expression : postfix_expression OP_INC %prec INC_DEC {1} | postfix_expression OP_DEC %prec INC_DEC {1} ; unary_expression : OP_INC unary_expression %prec INC_DEC {1} | OP_DEC unary_expression %prec INC_DEC {1} | arithmetic_unary_operator cast_expression %prec ARITHM_UNARY {1} | logical_unary_expression {1} ; logical_unary_expression : postfix_expression {1} | logical_unary_operator unary_expression %prec LOGICAL_UNARY {1} ; logical_unary_operator : OP_NOT {1} | OP_LNOT {1} ; arithmetic_unary_operator : PLUS {1} | MINUS {1} ; cast_expression : unary_expression {1} | LPAREN primitive_type_expression RPAREN cast_expression %prec = TYPE_CONV {1} | LPAREN class_type_expression RPAREN cast_expression %prec TYPE_CONV = {1} | LPAREN expression RPAREN logical_unary_expression %prec TYPE_CONV {1} ; primitive_type_expression : primitive_type {1} | primitive_type dims {1} ; class_type_expression : qualified_name dims {1} ; multiplicative_expression : cast_expression {1} | multiplicative_expression ASTERISK cast_expression {1} | multiplicative_expression OP_DIV cast_expression {1} | multiplicative_expression OP_MOD cast_expression {1} ; additive_expression : multiplicative_expression {1} | additive_expression PLUS multiplicative_expression {1} | additive_expression MINUS multiplicative_expression {1} ; shift_expression : additive_expression {1} | shift_expression OP_SHL additive_expression {1} | shift_expression OP_SHR additive_expression {1} | shift_expression OP_SHRR additive_expression {1} ; relational_expression : shift_expression {1} | relational_expression OP_LT shift_expression {1} | relational_expression OP_GT shift_expression {1} | relational_expression OP_LE shift_expression {1} | relational_expression OP_GE shift_expression {1} | relational_expression INSTANCEOF type_specifier {1} ; equality_expression : relational_expression {1} | equality_expression OP_EQ relational_expression {1} | equality_expression OP_NE relational_expression {1} ; and_expression : equality_expression {1} | and_expression OP_AND equality_expression {1} ; exclusive_or_expression : and_expression {1} | exclusive_or_expression OP_XOR and_expression {1} ; inclusive_or_expression : exclusive_or_expression {1} | inclusive_or_expression OP_OR exclusive_or_expression {1} ; conditional_and_expression : inclusive_or_expression {1} | conditional_and_expression OP_LAND inclusive_or_expression {1} ; conditional_or_expression : conditional_and_expression {1} | conditional_or_expression OP_LOR conditional_and_expression {1} ; conditional_expression : conditional_or_expression {1} | conditional_or_expression OP_AIF expression COLON = conditional_expression %prec BOOLEAN_IF {1} ; assignment_expression : conditional_expression {1} | unary_expression assignment_operator assignment_expression {1} ; assignment_operator : OP_ASSIGN {1} | ASS_MUL {1} | ASS_DIV {1} | ASS_MOD {1} | ASS_ADD {1} | ASS_SUB {1} | ASS_SHL {1} | ASS_SHR {1} | ASS_SHRR {1} | ASS_AND {1} | ASS_XOR {1} | ASS_OR {1} ; expression : assignment_expression {1} ; constant_expression : conditional_expression {1} ; %% ------=_NextPart_000_0000_01C11231.4018D030 Content-Type: application/octet-stream; name="java11_l.mll" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java11_l.mll" { open Java11_y (* The type token is defined in parser.mli *) exception Eof } let jHexDigit = ['0'-'9''a'-'f''A'-'F'] let jDigit = ['0'-'9'] let jOctalDigit = ['0'-'7'] let jTetraDigit = ['0'-'3'] let jNonZeroDigit = ['1'-'9'] let jLetter = ['a'-'z''A'-'Z''_'] let jAnyButSlash = [^'/'] let jAnyButAstr = [^'*'] let jBLANK = ' ' let jBLK = '\b' let jTAB = '\t' (* let jFF = '\f' *) let jESCCHR = '\\' let jCR = '\r' let jLF = '\n' (* let jUniEsc = '\1b' *) let jUniEsc = '\\''u' jHexDigit jHexDigit jHexDigit jHexDigit let jOctEscape1 = '\\' jOctalDigit let jOctEscape2 = '\\' jOctalDigit jOctalDigit let jOctEscape3 = '\\' jTetraDigit jOctalDigit jOctalDigit let jOctEscape = jOctEscape1 | jOctEscape2 | jOctEscape3 let jEscape = '\\' ['r''n''b''f''t''\\''\'''"'] let jULetter = jLetter | jUniEsc let jIdentifier = jULetter (jULetter | jDigit)* let jComment1 = '/''*' (jAnyButAstr | '*' jAnyButSlash)* '*''/' let jComment2 = '/' '/' [^'\r''\n']* let jComment = jComment1 | jComment2 let jDimension = '[' (jCR | jLF | jTAB | jBLK | jBLANK | jComment)* ']' let jIntSuffix = ['l''L'] let jDecimalNum = jNonZeroDigit jDigit* jIntSuffix? let jOctalNum = '0' jOctalDigit* jIntSuffix? let jHexNum = '0' ['x''X'] jHexDigit jHexDigit* jIntSuffix? let jIntegerLiteral = jDecimalNum | jOctalNum | jHexNum let jSign = ['+''-'] let jFlSuffix = ['f''F''d''D'] let jSignedInt = jSign? jDigit+ let jExpo = ['e''E'] let jExponentPart = jExpo jSignedInt? let jFloat1 = jDigit+ '.' jDigit+? jExponentPart? jFlSuffix? let jFloat2 = '.' jDigit+ jExponentPart? jFlSuffix? let jFloat3 = jDigit+ jExponentPart jFlSuffix? let jFloat4 = jDigit+ jFlSuffix let jFloatingPoint = jFloat1 | jFloat2 | jFloat3 | jFloat4 let jAnyChrChr = [^'\'''\\'] let jAnyStrChr = [^'"''\\'] let jCharacter = '\'' (jEscape | jOctEscape | jUniEsc | jAnyChrChr) '\'' let jString = '"' (jEscape | jOctEscape | jUniEsc | jAnyStrChr)* '"' let jNumeric = jIntegerLiteral | jFloatingPoint let jLiteral = jNumeric | jCharacter | jString let jOP_AIF = '?' let jOP_XOR = '^' let jPLUS = '+' let jASTERISK = '*' let jOP_DIV = '/' let jMINUS = '-' let jLCBRACK = '{' let jRCBRACK = '}' let jLBRACK = '[' let jRBRACK = ']' let jLPAREN = '(' let jRPAREN = ')' let jCOMMA = ',' let jPERIOD = '.' let jCOLON = ':' let jSEMICOLON = ';' let jOP_ASSIGN = '=' let jOP_LT = '<' let jOP_GT = '>' let jOP_NOT = '~' let jOP_LNOT = '!' let jOP_MOD = '%' let jOP_OR = '|' let jOP_AND = '&' rule token = parse "true" { LITERAL(Lexing.lexeme lexbuf) } | "false" { LITERAL(Lexing.lexeme lexbuf) } | jDimension { OP_DIM } | "==" { OP_EQ } | "<=" { OP_LE } | ">=" { OP_GE } | "!=" { OP_NE } | "||" { OP_LOR } | "&&" { OP_LAND } | "++" { OP_INC } | "--" { OP_DEC } | ">>" { OP_SHR } | "<<" { OP_SHL } | ">>>" { OP_SHRR } | "+=" { ASS_ADD } | "-=" { ASS_SUB } | "*=" { ASS_MUL } | "/=" { ASS_DIV } | "&=" { ASS_AND } | "|=" { ASS_OR } | "^=" { ASS_XOR } | "%=" { ASS_MOD } | "<<=" { ASS_SHL } | ">>=" { ASS_SHR } | ">>>=" { ASS_SHRR } | jOP_AIF { OP_AIF } | jOP_XOR { OP_XOR } | jPLUS { PLUS } | jASTERISK { ASTERISK } | jOP_DIV { OP_DIV } | jMINUS { MINUS } | jLCBRACK { LCBRACK } | jRCBRACK { RCBRACK } | jLBRACK { LBRACK } | jRBRACK { RBRACK } | jLPAREN { LPAREN } | jRPAREN { RPAREN } | jCOMMA { COMMA } | jPERIOD { PERIOD } | jCOLON { COLON } | jSEMICOLON { SEMICOLON } | jOP_ASSIGN { OP_ASSIGN } | jOP_LT { OP_LT } | jOP_GT { OP_GT } | jOP_NOT { OP_NOT } | jOP_LNOT { OP_LNOT } | jOP_MOD { OP_MOD } | jOP_OR { OP_OR } | jOP_AND { OP_AND } | "abstract" { ABSTRACT } | "do" { DO } | "implements" { IMPLEMENTS } | "package" { PACKAGE } | "throw" { THROW } | "boolean" { BOOLEAN } | "double" { DOUBLE } | "import" { IMPORT } | "private" { PRIVATE } | "throws" { THROWS } | "break" { BREAK } | "else" { ELSE } | "protected" { PROTECTED } | "transient" { TRANSIENT } | "byte" { BYTE } | "extends" { EXTENDS } | "instanceof" { INSTANCEOF } | "public" { PUBLIC } | "try" { TRY } | "case" { CASE } | "final" { FINAL } | "int" { INT } | "finally" { FINALLY } | "interface" { INTERFACE } | "return" { RETURN } | "void" { VOID } | "catch" { CATCH } | "float" { FLOAT } | "long" { LONG } | "short" { SHORT } | "volatile" { VOLATILE } | "char" { CHAR } | "for" { FOR } | "native" { NATIVE } | "static" { STATIC } | "while" { WHILE } | "class" { CLASS } | "new" { NEW } | "super" { SUPER } | "const" { CONST } | "null" { JNULL } | "switch" { SWITCH } | "continue" { CONTINUE } | "goto" { GOTO } | "synchronized" { SYNCHRONIZED } | "default" { DEFAULT } | "if" { IF } | "this" { THIS } (* | "cast" { CAST } | "future" { FUTURE } | "generic" { GENERIC } | "inner" { INNER } | "operator" { OPERATOR } | "outer" { OUTER } | "rest" { REST } | "var" { VAR } *) | jIdentifier { IDENTIFIER(Lexing.lexeme lexbuf) } | jDecimalNum { LITERAL(Lexing.lexeme lexbuf) } | jOctalNum { LITERAL(Lexing.lexeme lexbuf) } | jHexNum { LITERAL(Lexing.lexeme lexbuf) } | jFloatingPoint { LITERAL(Lexing.lexeme lexbuf) } | jCharacter { LITERAL(Lexing.lexeme lexbuf) } | jString { LITERAL(Lexing.lexeme lexbuf) } | jCR { token lexbuf } | jLF { token lexbuf } (* | jFF {} *) | jTAB { token lexbuf } | jBLK { token lexbuf } | jBLANK { token lexbuf } | jComment { token lexbuf } | eof { raise Eof } ------=_NextPart_000_0000_01C11231.4018D030-- ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr