lsa

package module
v0.0.0-...-d5d7f87 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2014 License: GPL-3.0 Imports: 5 Imported by: 0

README

lsa

Syntax analyzer for language L

Анализирует текст и формирует на его основе текст программы на языке СИ

Текст должен быть в кодировке utf-8

Возможности языка L
  1. Имена переменных, констант, функций, типов могут быть написаны на русском языке, могут содержать пробелы
  2. Поддерживает типы данных: целый, плавающий, двойной, строка, булев
  3. Поддерживает математические операции: +, -, *, /

Documentation

Index

Constants

View Source
const (
	LF = 0xA // LineFeed
)

Variables

View Source
var (
	EUnterminatedString = &lsaError{Msg: "Незакрытая строка, ожидается \""}
	EUnterminatedChar   = &lsaError{Msg: "Незакрытый символ, ожидается '"}
)
View Source
var (
	EExpectedExpression = &lsaError{Msg: "Отсутствует выражение после знака ="}
	ESyntaxError        = &lsaError{Msg: "Синтаксическая ошибка"}
	EExpectedArgument   = &lsaError{Msg: "Ожидается операнд"}
	ETooMuchCloseRB     = &lsaError{Msg: "Слишком много )"}
	ETooMuchOpenRB      = &lsaError{Msg: "Слишком много ("}
	EExpectedCloseOper  = &lsaError{Msg: "Отсутствует 'конец'"}
	EUnExpectedKeyword  = &lsaError{Msg: "Встретилось зарезервированное слово"}
)

ошибки синтаксиса

View Source
var InvalidRune = errors.New("Invalid utf8 char, support russian only")

Functions

This section is empty.

Types

type PLexem

type PLexem *TLexem

type TKeyword

type TKeyword struct {
	Id   TKeywordId
	Name string
}

type TKeywordId

type TKeywordId uint

type TLanguageItem

type TLanguageItem struct {
	Type TLanguageItemType
	// идентификаторы будут держать здесь номер строки из массива
	// всех идентификаторов
	Index uint
}

type TLanguageItemType

type TLanguageItemType uint

type TLexem

type TLexem struct {
	Next     PLexem
	Text     memfs.PBigByteArray
	Size     uint
	Type     TLexemType
	LineNo   uint
	ColumnNo uint
}

func (*TLexem) LexemAsString

func (self *TLexem) LexemAsString() string

type TLexemType

type TLexemType uint

type TReader

type TReader struct {
	Text      memfs.PBigByteArray
	Size      uint64
	Index     uint64
	NextIndex uint64
	LineNo    uint
	ColumnNo  uint
}

func (*TReader) BuildLexems

func (R *TReader) BuildLexems() (PLexem, error)

type TStringArray

type TStringArray []string

type TSyntaxDescriptor

type TSyntaxDescriptor struct {
	Lexem *TLexem
	// лексема к которой надо будет вернуться, чтобы продолжить перевод
	// например, если название переменной состоит из нескольких слов, то
	// после нахождения знака =, надо будет вернуться к первому слову
	// переменной, чтобы записать её полное название
	StartLexem    *TLexem
	LanguageItems []TLanguageItem
	Parenthesis   int
	BeginCount    int
	StrNumbers    TStringArray
	StrIdents     TStringArray
	StrStrings    TStringArray
	Keyword       TKeywordId
}

func TranslateCode

func TranslateCode(ALexem PLexem) (TSyntaxDescriptor, error)

Переводит текст в лексемах в массив элементов языка

func (*TSyntaxDescriptor) AppendIdent

func (self *TSyntaxDescriptor) AppendIdent(AName string)

func (*TSyntaxDescriptor) AppendItem

func (self *TSyntaxDescriptor) AppendItem(AType TLanguageItemType)

func (*TSyntaxDescriptor) AppendNumber

func (self *TSyntaxDescriptor) AppendNumber(S string)

func (*TSyntaxDescriptor) AppendString

func (self *TSyntaxDescriptor) AppendString(S string)

func (*TSyntaxDescriptor) ExtractComplexIdent

func (self *TSyntaxDescriptor) ExtractComplexIdent() (error, string,
	TKeywordId)

Извлекает из лексем идентификатор, состоящий из нескольких слов Возвращает: (1)ошибку не nil, если первая лексема не ltIdent или первое

слово — зарезервированное слово; (2)строку — идентификатор, состоящий из
нескольких слов, разделённых пробелом(кол-во пробелов между словами не
различается; (3)номер зарезервированного слова, если не равен kwiUnknown,
значит такое слово встретилось

func (*TSyntaxDescriptor) Init

func (self *TSyntaxDescriptor) Init()

func (*TSyntaxDescriptor) NextLexem

func (self *TSyntaxDescriptor) NextLexem()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL