Skip to content

Commit

Permalink
initial commit, add scanner
Browse files Browse the repository at this point in the history
  • Loading branch information
ke-yu committed Dec 17, 2015
0 parents commit f30f045
Show file tree
Hide file tree
Showing 8 changed files with 31,313 additions and 0 deletions.
Binary file added src/.main.go.swp
Binary file not shown.
16 changes: 16 additions & 0 deletions src/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

import (
"fmt"
"scanner"
)

func main() {
source := "/* comment*/def foo:int[]..[](x1, x2ńńńńńńń) { return = 0xff + 077 + 12.34 + 56 + \"hello \n\rw\torld\" + 'hello world' + x1 * y2 + x3 / y3 && y || !y == y != {m, n} ? c)//hello world"
scanner := scanner.CreateScanner(source)
token := scanner.Scan()
for !scanner.EOF() {
fmt.Println(token.Value())
token = scanner.Scan()
}
}
883 changes: 883 additions & 0 deletions src/scanner/scanner.go

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions src/scanner/scanner_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package scanner

import(
"testing"
)

func TestScanIdentifier(t *testing.T) {
source := "foo"
scanner := CreateScanner(source)

token := scanner.Scan()

expected := "foo"
actual := token.Value()

if (actual != expected) {
t.Error("Failed at scanning identifier. Expected:", expected, ", got :", actual)
}
}

func TestScanOctNumber(t *testing.T) {
source := "077"
scanner := CreateScanner(source)

token := scanner.Scan()

expected := "63"
actual := token.Value()

if (actual != expected) {
t.Error("Failed at scanning identifier. Expected:", expected, ", got :", actual)
}

token = scanner.Scan()
}

func TestScanHexNumber(t *testing.T) {
source := "0xff"
scanner := CreateScanner(source)

token := scanner.Scan()

expected := "255"
actual := token.Value()

if (actual != expected) {
t.Error("Failed at scanning identifier. Expected:", expected, ", got :", actual)
}

token = scanner.Scan()
}
30,319 changes: 30,319 additions & 0 deletions tools/UnicodeData-9.0.0d2.txt

Large diffs are not rendered by default.

42 changes: 42 additions & 0 deletions tools/dump_identifier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import argparse
import os

def main():
parser = argparse.ArgumentParser(description="Dump Identifier Start")
parser.add_argument('-f', '--data_file', required=True, help='unicode data file')
parser.add_argument('-p', '--part', action='store_true', default=False, help='if include identifier part')
args = parser.parse_args()

unicode_data = args.data_file
if unicode_data is None:
print('Need to provide unicode data path')
return

# Uppercase letter (Lu)
# Lowercase letter (Ll)
# Titlecase letter (Lt)
# Modifier letter (Lm)
# Other letter (lo)
# Letter number (Nl)
#
# Non-spacing mark (Mn)
# Combining spacing mark (Mc)
# Decimal number (Nd)
# Connector punctation (Pc)
# ZWNJ, ZWJ
if args.part:
categories = set(["Lu", "Ll", "Lt", "Lm", "Lo", "Nl", "Mn", "Mc", "Nd", "Pc", "ZERO WIDTH NON-JOINER", "ZERO WIDTH JOINER"])
else:
categories = set(["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"])

with open(unicode_data, 'r') as data_file:
for line in data_file:
fields = line.split(";")
for field in fields:
if field in categories:
decimal = int(fields[0], 16)
print(str(decimal) + ', ', end="")
break

if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions tools/identifier_all.txt

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tools/identifier_start.txt

Large diffs are not rendered by default.

0 comments on commit f30f045

Please sign in to comment.