aboutsummaryrefslogtreecommitdiff
path: root/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'parser.py')
-rwxr-xr-xparser.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/parser.py b/parser.py
index 1d59800..a6af003 100755
--- a/parser.py
+++ b/parser.py
@@ -18,6 +18,9 @@ import ply.lex as lex
import ply.yacc as yacc
import nodes
+reserved = {'true' : 'TRUE',
+ 'false' : 'FALSE'}
+
tokens = ['LPAREN',
'RPAREN',
'LBRACKET',
@@ -32,7 +35,7 @@ tokens = ['LPAREN',
'STRING',
'EOL_CONTINUE',
'EOL',
- ]
+ ] + list(reserved.values())
t_EQUALS = '='
t_LPAREN = '\('
@@ -41,13 +44,17 @@ t_LBRACKET = '\['
t_RBRACKET = '\]'
t_LBRACE = '\{'
t_RBRACE = '\}'
-t_ATOM = '[a-zA-Z][_0-9a-zA-Z]*'
t_COMMENT = '\#[^\n]*'
t_COMMA = ','
t_DOT = '\.'
t_ignore = ' \t'
+def t_ATOM(t):
+ '[a-zA-Z][_0-9a-zA-Z]*'
+ t.type = reserved.get(t.value, 'ATOM')
+ return t
+
def t_STRING(t):
"'[^']*'"
t.value = t.value[1:-1]
@@ -88,6 +95,14 @@ def p_expression_atom(t):
'expression : ATOM'
t[0] = nodes.AtomExpression(t[1], t.lineno(1))
+def p_expression_bool(t):
+ '''expression : TRUE
+ | FALSE'''
+ if t[1] == 'true':
+ t[0] = nodes.BoolExpression(True, t.lineno(1))
+ else:
+ t[0] = nodes.BoolExpression(False, t.lineno(1))
+
def p_expression_string(t):
'expression : STRING'
t[0] = nodes.StringExpression(t[1], t.lineno(1))