Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joshua Yanovski
iris-coq
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
Supports
Markdown
0%
Try again
or
attach a new 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