Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dmitry Khalanskiy
Iris
Commits
46b5387d
Commit
46b5387d
authored
Mar 16, 2017
by
Robbert Krebbers
Browse files
Support nat tokens in the tokenizer.
parent
33ca3791
Changes
2
Hide whitespace changes
Inline
Side-by-side
opam.pins
View file @
46b5387d
coq-stdpp https://gitlab.mpi-sws.org/robbertkrebbers/coq-stdpp
fd8a6717a2610c00dec920ee5f33b00b14ef1fbf
coq-stdpp https://gitlab.mpi-sws.org/robbertkrebbers/coq-stdpp
6ffa20c8f23797f81f1bb55ab27432e897de71d5
theories/proofmode/tokens.v
View file @
46b5387d
...
...
@@ -3,6 +3,7 @@ Set Default Proof Using "Type".
Inductive
token
:
=
|
TName
:
string
→
token
|
TNat
:
nat
→
token
|
TAnom
:
token
|
TFrame
:
token
|
TBar
:
token
...
...
@@ -26,42 +27,64 @@ Inductive token :=
|
TMinus
:
token
|
TSep
:
token
.
Fixpoint
cons_name
(
kn
:
string
)
(
k
:
list
token
)
:
list
token
:
=
match
kn
with
""
=>
k
|
_
=>
TName
(
string_rev
kn
)
::
k
end
.
Fixpoint
tokenize_go
(
s
:
string
)
(
k
:
list
token
)
(
kn
:
string
)
:
list
token
:
=
Inductive
state
:
=
|
SName
:
string
→
state
|
SNat
:
nat
→
state
|
SNone
:
state
.
Definition
cons_state
(
kn
:
state
)
(
k
:
list
token
)
:
list
token
:
=
match
kn
with
|
SNone
=>
k
|
SName
s
=>
TName
(
string_rev
s
)
::
k
|
SNat
n
=>
TNat
n
::
k
end
.
Fixpoint
tokenize_go
(
s
:
string
)
(
k
:
list
token
)
(
kn
:
state
)
:
list
token
:
=
match
s
with
|
""
=>
reverse
(
cons_
nam
e
kn
k
)
|
String
"?"
s
=>
tokenize_go
s
(
TAnom
::
cons_
nam
e
kn
k
)
""
|
String
"$"
s
=>
tokenize_go
s
(
TFrame
::
cons_
nam
e
kn
k
)
""
|
String
"["
s
=>
tokenize_go
s
(
TBracketL
::
cons_
nam
e
kn
k
)
""
|
String
"]"
s
=>
tokenize_go
s
(
TBracketR
::
cons_
nam
e
kn
k
)
""
|
String
"|"
s
=>
tokenize_go
s
(
TBar
::
cons_
nam
e
kn
k
)
""
|
String
"("
s
=>
tokenize_go
s
(
TParenL
::
cons_
nam
e
kn
k
)
""
|
String
")"
s
=>
tokenize_go
s
(
TParenR
::
cons_
nam
e
kn
k
)
""
|
String
"&"
s
=>
tokenize_go
s
(
TAmp
::
cons_
nam
e
kn
k
)
""
|
String
"{"
s
=>
tokenize_go
s
(
TBraceL
::
cons_
nam
e
kn
k
)
""
|
String
"}"
s
=>
tokenize_go
s
(
TBraceR
::
cons_
nam
e
kn
k
)
""
|
String
"%"
s
=>
tokenize_go
s
(
TPure
::
cons_
nam
e
kn
k
)
""
|
String
"#"
s
=>
tokenize_go
s
(
TAlways
::
cons_
nam
e
kn
k
)
""
|
String
">"
s
=>
tokenize_go
s
(
TModal
::
cons_
nam
e
kn
k
)
""
|
String
"!"
(
String
"%"
s
)
=>
tokenize_go
s
(
TPureIntro
::
cons_
nam
e
kn
k
)
""
|
String
"!"
(
String
"#"
s
)
=>
tokenize_go
s
(
TAlwaysIntro
::
cons_
nam
e
kn
k
)
""
|
String
"!"
(
String
">"
s
)
=>
tokenize_go
s
(
TModalIntro
::
cons_
nam
e
kn
k
)
""
|
""
=>
reverse
(
cons_
stat
e
kn
k
)
|
String
"?"
s
=>
tokenize_go
s
(
TAnom
::
cons_
stat
e
kn
k
)
SNone
|
String
"$"
s
=>
tokenize_go
s
(
TFrame
::
cons_
stat
e
kn
k
)
SNone
|
String
"["
s
=>
tokenize_go
s
(
TBracketL
::
cons_
stat
e
kn
k
)
SNone
|
String
"]"
s
=>
tokenize_go
s
(
TBracketR
::
cons_
stat
e
kn
k
)
SNone
|
String
"|"
s
=>
tokenize_go
s
(
TBar
::
cons_
stat
e
kn
k
)
SNone
|
String
"("
s
=>
tokenize_go
s
(
TParenL
::
cons_
stat
e
kn
k
)
SNone
|
String
")"
s
=>
tokenize_go
s
(
TParenR
::
cons_
stat
e
kn
k
)
SNone
|
String
"&"
s
=>
tokenize_go
s
(
TAmp
::
cons_
stat
e
kn
k
)
SNone
|
String
"{"
s
=>
tokenize_go
s
(
TBraceL
::
cons_
stat
e
kn
k
)
SNone
|
String
"}"
s
=>
tokenize_go
s
(
TBraceR
::
cons_
stat
e
kn
k
)
SNone
|
String
"%"
s
=>
tokenize_go
s
(
TPure
::
cons_
stat
e
kn
k
)
SNone
|
String
"#"
s
=>
tokenize_go
s
(
TAlways
::
cons_
stat
e
kn
k
)
SNone
|
String
">"
s
=>
tokenize_go
s
(
TModal
::
cons_
stat
e
kn
k
)
SNone
|
String
"!"
(
String
"%"
s
)
=>
tokenize_go
s
(
TPureIntro
::
cons_
stat
e
kn
k
)
SNone
|
String
"!"
(
String
"#"
s
)
=>
tokenize_go
s
(
TAlwaysIntro
::
cons_
stat
e
kn
k
)
SNone
|
String
"!"
(
String
">"
s
)
=>
tokenize_go
s
(
TModalIntro
::
cons_
stat
e
kn
k
)
SNone
|
String
"/"
(
String
"/"
(
String
"="
s
))
=>
tokenize_go
s
(
TSimpl
::
TDone
::
cons_
nam
e
kn
k
)
""
|
String
"/"
(
String
"/"
s
)
=>
tokenize_go
s
(
TDone
::
cons_
nam
e
kn
k
)
""
|
String
"/"
(
String
"="
s
)
=>
tokenize_go
s
(
TSimpl
::
cons_
nam
e
kn
k
)
""
|
String
"*"
(
String
"*"
s
)
=>
tokenize_go
s
(
TAll
::
cons_
nam
e
kn
k
)
""
|
String
"*"
s
=>
tokenize_go
s
(
TForall
::
cons_
nam
e
kn
k
)
""
|
String
"-"
s
=>
tokenize_go
s
(
TMinus
::
cons_
nam
e
kn
k
)
""
tokenize_go
s
(
TSimpl
::
TDone
::
cons_
stat
e
kn
k
)
SNone
|
String
"/"
(
String
"/"
s
)
=>
tokenize_go
s
(
TDone
::
cons_
stat
e
kn
k
)
SNone
|
String
"/"
(
String
"="
s
)
=>
tokenize_go
s
(
TSimpl
::
cons_
stat
e
kn
k
)
SNone
|
String
"*"
(
String
"*"
s
)
=>
tokenize_go
s
(
TAll
::
cons_
stat
e
kn
k
)
SNone
|
String
"*"
s
=>
tokenize_go
s
(
TForall
::
cons_
stat
e
kn
k
)
SNone
|
String
"-"
s
=>
tokenize_go
s
(
TMinus
::
cons_
stat
e
kn
k
)
SNone
|
String
(
Ascii
.
Ascii
false
true
false
false
false
true
true
true
)
(* unicode ∗ *)
(
String
(
Ascii
.
Ascii
false
false
false
true
false
false
false
true
)
(
String
(
Ascii
.
Ascii
true
true
true
false
true
false
false
true
)
s
))
=>
tokenize_go
s
(
TSep
::
cons_
nam
e
kn
k
)
""
tokenize_go
s
(
TSep
::
cons_
stat
e
kn
k
)
SNone
|
String
a
s
=>
if
is_space
a
then
tokenize_go
s
(
cons_name
kn
k
)
""
else
tokenize_go
s
k
(
String
a
kn
)
(* TODO: Complain about invalid characters, to future-proof this
against making more characters special. *)
(* TODO: Complain about invalid characters, to future-proof this
against making more characters special. *)
if
is_space
a
then
tokenize_go
s
(
cons_state
kn
k
)
SNone
else
match
kn
with
|
SNone
=>
match
is_nat
a
with
|
Some
n
=>
tokenize_go
s
k
(
SNat
n
)
|
None
=>
tokenize_go
s
k
(
SName
(
String
a
""
))
end
|
SName
s'
=>
tokenize_go
s
k
(
SName
(
String
a
s'
))
|
SNat
n
=>
match
is_nat
a
with
|
Some
n'
=>
tokenize_go
s
k
(
SNat
(
n'
+
10
*
n
))
|
None
=>
tokenize_go
s
(
TNat
n
::
k
)
(
SName
(
String
a
""
))
end
end
end
.
Definition
tokenize
(
s
:
string
)
:
list
token
:
=
tokenize_go
s
[]
""
.
Definition
tokenize
(
s
:
string
)
:
list
token
:
=
tokenize_go
s
[]
SNone
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment