Hi, I'm trying to construct a parser, but I'm stuck with some basic stuff... For example, I want to match the following:
letter = "A"..."Z" | "a"..."z" literal = letter+ include_bool := "+" | "-" term = [include_bool] literal So I defined this as: literal = Word(alphas) include_bool = Optional(oneOf("+ -")) term = include_bool + literal The problem is that: term.parseString("+a") -> (['+', 'a'], {}) # OK term.parseString("+ a") -> (['+', 'a'], {}) # KO. It shouldn't recognize any token since I didn't said the SPACE was allowed between include_bool and literal. Can anyone give me an hand here? Cheers! Hugo Ferreira BTW, the following is the complete grammar I'm trying to implement with pyparsing: ## L ::= expr | expr L ## expr ::= term | binary_expr ## binary_expr ::= term " " binary_op " " term ## binary_op ::= "*" | "OR" | "AND" ## include_bool ::= "+" | "-" ## term ::= ([include_bool] [modifier ":"] (literal | range)) | ("~" literal) ## modifier ::= (letter | "_")+ ## literal ::= word | quoted_words ## quoted_words ::= '"' word (" " word)* '"' ## word ::= (letter | digit | "_")+ ## number ::= digit+ ## range ::= number (".." | "...") number ## letter ::= "A"..."Z" | "a"..."z" ## digit ::= "0"..."9" And this is where I got so far: word = Word(nums + alphas + "_") binary_op = oneOf("* and or", caseless=True).setResultsName("operator") include_bool = oneOf("+ -") literal = (word | quotedString).setResultsName("literal") modifier = Word(alphas + "_") rng = Word(nums) + (Literal("..") | Literal("...")) + Word(nums) term = ((Optional(include_bool) + Optional(modifier + ":") + (literal | rng)) | ("~" + literal)).setResultsName("Term") binary_expr = (term + binary_op + term).setResultsName("binary") expr = (binary_expr | term).setResultsName("Expr") L = OneOrMore(expr) -- GPG Fingerprint: B0D7 1249 447D F5BB 22C5 5B9B 078C 2615 504B 7B85
-- http://mail.python.org/mailman/listinfo/python-list