diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 20:40:00 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 20:40:00 +0200 |
commit | bd6e542f1c5be82ce24eb9374423747fa7b27a29 (patch) | |
tree | 77173a87f953349b97e1071c7016e5ff2edd448a /parser.py | |
parent | faaa0df78b139bd1058ccff40ba31e39f7f2381e (diff) | |
download | meson-bd6e542f1c5be82ce24eb9374423747fa7b27a29.zip meson-bd6e542f1c5be82ce24eb9374423747fa7b27a29.tar.gz meson-bd6e542f1c5be82ce24eb9374423747fa7b27a29.tar.bz2 |
Added boolean data type.
Diffstat (limited to 'parser.py')
-rwxr-xr-x | parser.py | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -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)) |