From 8a7bdc73a7c65d23c79e1c470ba0fbff975b59a5 Mon Sep 17 00:00:00 2001 From: Chimrod <> Date: Fri, 27 Oct 2023 09:59:28 +0200 Subject: Updated the way to process the strings --- lib/qparser/lexbuf.mli | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'lib/qparser/lexbuf.mli') diff --git a/lib/qparser/lexbuf.mli b/lib/qparser/lexbuf.mli index ec94d1b..5fda8ff 100644 --- a/lib/qparser/lexbuf.mli +++ b/lib/qparser/lexbuf.mli @@ -13,7 +13,11 @@ val buffer : t -> Sedlexing.lexbuf (** Extract the sedlex buffer. Required in each rule. *) val positions : t -> Lexing.position * Lexing.position -(** Extract the starting and ending position for the matched token *) +(** Extract the starting and ending position for the matched token. + + This function is used outside of the parser, in order to get the position + of the latest token in the case of an error. + *) val content : t -> string (** Extract the token matched by the rule *) @@ -29,18 +33,28 @@ val tokenize : (t -> 'a) -> t -> unit -> 'a * Lexing.position * Lexing.position val rollback : t -> unit (** Rollback the latest token matched *) -(** {1 State in expressions} *) +(** {1 State in expressions} + + The comment system is terrible. The same symbol can be used for : + - starting a comment + - inequality operation + + In order to manage this, I try to identify the context in a very basic way, + using a stack for determining the token to send. +*) type state = - | Token - | String - | DString - | MString of int - | EndString - | Expression + | Token (** Default state, parsing the tokens *) + | String (** String enclosed by [''] *) + | DString (** String enclosed by [""] *) + | MString of int (** String enclosed by [{}]*) + | EndString (** State raised just before closing the string *) + | Expression (** Expression where [!] is an operator *) val state : t -> state option -(** Get the current state for the lexer *) +(** Get the current state for the lexer. + + @return [None] when in the default state *) val enter_state : t -> state -> unit (** Enter into a new state *) -- cgit v1.2.3