mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Update Peg.md text
This commit is contained in:
		
							
								
								
									
										20
									
								
								doc/Peg.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								doc/Peg.md
									
									
									
									
									
								
							| @@ -72,7 +72,7 @@ given to the 0 byte, or the string terminator in many languages. | ||||
| | `(range "az" "AZ")` | Matches characters in a range and advances 1 character. Multiple ranges can be combined together. | | ||||
| | `(set "abcd")`  | Match any character in the argument string. Advances 1 character. | | ||||
|  | ||||
| Primitve patterns are not that useful by themselves, but can be passed to `peg/match` and `peg/compile` as any pattern. | ||||
| Primitive patterns are not that useful by themselves, but can be passed to `peg/match` and `peg/compile` like any other pattern. | ||||
|  | ||||
| ```clojure | ||||
| (peg/match "hello" "hello") # -> @[] | ||||
| @@ -87,18 +87,11 @@ Primitve patterns are not that useful by themselves, but can be passed to `peg/m | ||||
|  | ||||
| ## Combining Patterns | ||||
|  | ||||
| These primitive patterns are combined with a few specials to match a wide number of languages. These specials | ||||
| These primitive patterns can be combined with several combinators to match a wide number of | ||||
| languages. These combinators | ||||
| can be thought of as the looping and branching forms in a traditional language | ||||
| (that is how they are implemented when compiled to bytecode). | ||||
|  | ||||
| PEGs try to match an input text with a pattern in a greedy manner. | ||||
| This means that if a rule fails to match, that rule will fail and not try again. The only | ||||
| backtracking provided in a peg is provided by the `(choice x y z ...)` special, which will | ||||
| try rules in order until one succeeds, and the whole pattern succeeds. If no sub pattern | ||||
| succeeds, then the whole pattern fails. Note that this means that the order of `x y z` in choice | ||||
| DOES matter. If y matches everything that z matches, z will never succeed. | ||||
|  | ||||
|  | ||||
| | Pattern Signature | What it matches | | ||||
| | ------- | --------------- | | ||||
| | `(choice a b c ...)` | Tries to match a, then b, and so on. Will succeed on the first successful match, and fails if none of the arguments match the text. | | ||||
| @@ -117,6 +110,13 @@ DOES matter. If y matches everything that z matches, z will never succeed. | ||||
| | `(look offset patt)` | Matches only if patt matches at a fixed offset. offset can be any integer. patt will not produce captures and the peg will not advance any characters. | | ||||
| | `(> offset patt)` | Alias for `(look offset patt)` | | ||||
|  | ||||
| PEGs try to match an input text with a pattern in a greedy manner. | ||||
| This means that if a rule fails to match, that rule will fail and not try again. The only | ||||
| backtracking provided in a peg is provided by the `(choice x y z ...)` special, which will | ||||
| try rules in order until one succeeds, and the whole pattern succeeds. If no sub pattern | ||||
| succeeds, then the whole pattern fails. Note that this means that the order of `x y z` in choice | ||||
| DOES matter. If y matches everything that z matches, z will never succeed. | ||||
|  | ||||
| ## Captures | ||||
|  | ||||
| So far we have only been concerned with "does this text match this language?". This is useful, but | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose