56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
// Copyright 2019 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
const TokenType = {
|
|
kEOF: "end of file",
|
|
kError: "error",
|
|
|
|
kIdentifier: "identifier",
|
|
|
|
kIntegerLiteral: "integer_literal",
|
|
kFloatLiteral: "float_literal",
|
|
kStringLiteral: "string_literal",
|
|
kResultId: "result_id",
|
|
|
|
kOp: "Op",
|
|
kEqual: "=",
|
|
kPipe: "|",
|
|
};
|
|
|
|
class Token {
|
|
/**
|
|
* @param {TokenType} type The type of token
|
|
* @param {Integer} line The line number this token was on
|
|
* @param {Any} data Data attached to the token
|
|
* @param {Integer} bits If the type is a float or integer the bit width
|
|
*/
|
|
constructor(type, line, data) {
|
|
this.type_ = type;
|
|
this.line_ = line;
|
|
this.data_ = data;
|
|
this.bits_ = 0;
|
|
}
|
|
|
|
get type() { return this.type_; }
|
|
get line() { return this.line_; }
|
|
|
|
get data() { return this.data_; }
|
|
set data(val) { this.data_ = val; }
|
|
|
|
get bits() { return this.bits_; }
|
|
set bits(val) { this.bits_ = val; }
|
|
}
|
|
|
|
export {Token, TokenType};
|