m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser.js16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/parser.js b/src/parser.js
index 9f2c6ac..5b9b718 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -40,7 +40,12 @@ newSymbol('+', null, 20, (left, parser) => {
}
})
-newSymbol('-', null, 20, (left, parser) => {
+newSymbol('-', (parser) => {
+ return {
+ type: 'negative',
+ value: parser.expression(40)
+ }
+}, 20, (left, parser) => {
return {
type: 'subtract',
left: left,
@@ -56,10 +61,17 @@ const newParser = (tokens) => {
currentToken: 0,
token: function() { return this.tokens[this.currentToken] },
advanceToken: function() { this.currentToken++ },
+ match: function(token) {
+ if (this.token().type === token) {
+ this.advanceToken()
+ } else {
+ throw 'error'
+ }
+ },
expression: function(rbp) {
let symbol = this.token()
- let left = symbol.nud()
this.advanceToken()
+ let left = symbol.nud(this)
while (rbp < this.token().lbp) {
symbol = this.token()