user546482872
user546482872

Reputation: 51

How will I implement the lexing of strings using ocamllex?

I am new to the concept of lexing and am trying to write a lexer in ocaml to read the following example input:

(blue, 4, dog, 15)

Basically the input is a list of any random string or integer. I have found many examples for int based inputs as most of them model a calculator, but have not found any guidance through examples or the documentation for lexing strings. Here is what I have so far as my lexer:

(* File lexer.mll *)
{

open Parser  

}

rule lexer_main = parse
      [' ' '\r' '\t']     { lexer_main lexbuf }     (* skip blanks *)
    | ['0'-'9']+ as lxm { INT(int_of_string lxm) }
    | '('      { LPAREN }
    | ')'      { RPAREN }
    | ','      { COMMA }
    | eof      { EOF }
    | _        { syntax_error "couldn't identify the token" }

As you can see I am missing the ability to parse strings. I am aware that a string can be represented in the form ['a'-'z'] so would it be as simple as ['a'-'z'] { STRING } Thanks for your help.

Upvotes: 0

Views: 511

Answers (1)

Jeffrey Scofield
Jeffrey Scofield

Reputation: 66808

The notation ['a'-'z'] represents a single character, not a string. So a string is more or less a sequence of one or more of those. I have a fear that this is an assignment, so I'll just say that you can extend a pattern for a single character into a pattern for a sequence of the same kind of character using the same technique you're using for INT.

However, I wonder whether you really want your strings to be so restrictive. Are they really required to consist of alphabetic characters only?

Upvotes: 1

Related Questions