summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
commita4d7fb2da6a8390b818dae8d07391c7d76e365e9 (patch)
tree166d1ed4bb07337ead19fd4f7ebc8d79885e2cfd /lang
parent2eab5877e1c634db872b595dd2414f4031ae4eb5 (diff)
parser: hande const declarations
Only symbols are produced, no bytecode is emitted. The constant expressions are evaluated at compile time using the stdlib package go/constant. The parser handles implicit repetition of the last non-empty expression list. The iota symbol is reset to 0 and incremented for each line of a const block. To be done in a next commit: type conversions.
Diffstat (limited to 'lang')
-rw-r--r--lang/token.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/lang/token.go b/lang/token.go
index af2fc26..37ac557 100644
--- a/lang/token.go
+++ b/lang/token.go
@@ -6,10 +6,12 @@ const (
Illegal = iota
Comment
Ident
- Int
+
+ // Literal values
+ Char
Float
Imag
- Char
+ Int
String
// Binary operators (except indicated)
@@ -114,6 +116,7 @@ const (
)
func (t TokenId) IsKeyword() bool { return t >= Break && t <= Var }
+func (t TokenId) IsLiteral() bool { return t >= Char && t <= String }
func (t TokenId) IsOperator() bool { return t >= Add && t <= Tilde }
func (t TokenId) IsBlock() bool { return t >= ParenBlock && t <= BraceBlock }
func (t TokenId) IsBoolOp() bool { return t >= Equal && t <= NotEqual || t == Not }