diff options
author | max99x <max99x@gmail.com> | 2011-07-06 16:37:28 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-07-06 16:37:28 +0300 |
commit | dedb83b9e15591893e1b30220c721e447518f5d9 (patch) | |
tree | 87068307ade1fbcff662fcef5e943d944f4f7374 /third_party/ply/example/BASIC/basiclex.py | |
parent | 13ac46b2c9be4aa17319c450a15ed96b71e091d7 (diff) | |
parent | e84f1845f1a96ecfda4f1ffc0ba2052dc7c8c86d (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'third_party/ply/example/BASIC/basiclex.py')
-rw-r--r-- | third_party/ply/example/BASIC/basiclex.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/third_party/ply/example/BASIC/basiclex.py b/third_party/ply/example/BASIC/basiclex.py new file mode 100644 index 00000000..3d27cdee --- /dev/null +++ b/third_party/ply/example/BASIC/basiclex.py @@ -0,0 +1,74 @@ +# An implementation of Dartmouth BASIC (1964) + +from ply import * + +keywords = ( + 'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP', + 'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW', +) + +tokens = keywords + ( + 'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER', + 'LPAREN','RPAREN','LT','LE','GT','GE','NE', + 'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING', + 'ID','NEWLINE' +) + +t_ignore = ' \t' + +def t_REM(t): + r'REM .*' + return t + +def t_ID(t): + r'[A-Z][A-Z0-9]*' + if t.value in keywords: + t.type = t.value + return t + +t_EQUALS = r'=' +t_PLUS = r'\+' +t_MINUS = r'-' +t_TIMES = r'\*' +t_POWER = r'\^' +t_DIVIDE = r'/' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_LT = r'<' +t_LE = r'<=' +t_GT = r'>' +t_GE = r'>=' +t_NE = r'<>' +t_COMMA = r'\,' +t_SEMI = r';' +t_INTEGER = r'\d+' +t_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))' +t_STRING = r'\".*?\"' + +def t_NEWLINE(t): + r'\n' + t.lexer.lineno += 1 + return t + +def t_error(t): + print("Illegal character %s" % t.value[0]) + t.lexer.skip(1) + +lex.lex(debug=0) + + + + + + + + + + + + + + + + + |