it sort of depends on what you are trying to do.
I can't really tell from the name what that book is going to cover, but I expect that most books on programming language theory are going to start with things like lambda calculus, and go into type theory, etc, etc. If you are trying to learn the theoretical underpinnings of programming languages then this is great!
However, in my opinion a more practical place to start is with learning how to implement a programming language. That is, how to write a compiler. For that there is a whole separate set of theory (regular expressions, grammars, automata, etc) that you need to learn. The standard text for this is "the dragon book".
> Programming principles and practice
Let me look at the book. C++ books will often have the C++ grammar as an appendix at the end of the book. I suspect this is simply part of the book itself.
EDIT: I looked at the book on Amazon and the grammar appears to be for a simple calculator - and not the C++ grammar. Understanding a grammar will be difficult for you if you have not been formally trained at university in computer science. Explaining grammars is probably too complicated for this sub. I don't know what to really tell you. If you have not studied this in college, then you are probably in a bit over your head.
Most of us who studied CS are familiar with the dragon book. This is kind of the quintessential introduction to compilers and grammars and parsers and tokenizers. You will probably be a bit lost if you have not read this book or something similar.
EDIT2:
Here is a reasonable college level introduction to compilers.
Cara, para isso tem que saber um pouco da história da computação. Vou te contrar uma mini história aqui e te passar uns links bem simples para tentar te dar uma introdução.
Essa série (atual) do Iberê no canal do mundo tem explicado essa pergunta. Quero voltar nossa atenção ao episódio 1: https://www.youtube.com/watch?v=xajcV4lwY3Q
Os computadores já existiam muito antes da eletricidade, inclusive. Era máquinas que se movimentavam a manivela ou a vapor. Esse tipo de computador eram "caixas mágicas" que tinham uma capacidade super limitada de funções. Alguns adicionavam e somavam, outros mais complexos tinham multiplicação, divisão, quem sabe até derivadas e integravéis.
Mas é isso. Imagina uma máquina super cara - na casa de milhares a milhões de dólares/libras/euros - que executava uma "conta simples". Alguns dos primeiros computadores eram usados para calcular a velocidade e posição dos astros no céu, outros eram usados para contas gigantes que o governo, ou alguma instituição de ensino, precisava.
Vou pular alguns anos agora e ir para 1936. Se você gostou da história acima, continua assistindo os vídeos da série do Iberê - são bem legais.
Alan Turing nasceu em 1912 em Londres, no Reino Unido. Estudou e se graduou em matemática pela universidade do rei (King's College), em Cambridge. Durante esse tempo, ele teve algumas publicações de provas matemáticas (mais especificamente uma chamada "On Computable Nunbems, with an Application to the Entscheidungsproblem", se tiver curioso: https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf ) que chamaram a atenção de uma pessoa muito espescial nos EUA: John von Neumann, um matemático Húngaro que trabalhava na universidade de Princenton, Nova Jersey, EUA.
Von Neumann, um outro gênio (ja já a gente chega nele. Pessoalmente, ele é a minha "figura" favorita na história da computação) escreveu uma carta convite para Turing e esse conseguiu passar 1 ano de intercâmbio nos EUA. Turing fez seu doutorado sob a tutela do professor Alonzo Church (outro matemático, responsável pela criação da lógica do lambda cálculo) e no final desse período públicou sua tese de doutorado: "Systems of Logic Based on Ordinals" ( https://www.dcc.fc.up.pt/~acm/turing-phd.pdf - esse link não é a tese original, mas uma transcrição feita pela Universidade do Porto). É curioso ver que ele ainda descreve um "computador mecânico" em sua tese.
Em resumo, a ideia proposta por Turing era de uma máquina abstrata que só trabalhava com valores de 0 e 1 - que poderiam representar qualquer outro valor imaginável, seja um número ou uma palavra ( capítulo 10, página 56 da tese acima). Esse mesmo computador recebia uma sequencia de números 0 e 1 como input registradas em uma fita, onde esses números consguidam denominar tanto a função a ser trabalhada quanto os valores a serem computados. O cabeçote da máquina podia ler e escrever na fita, e também move-la para a direita e para a esquerda.
Depois de algun tempo, Alonzo Church, o professor de Alan Turing, começou a chamar a sua tese e sua máquina abstrata imaginária de "The Turing Machine" (A máquina de Turing) - e as vezes de "O computador Universal". John von Neumann, a figura acima e "amigo" (não tem registros da amizade dos dois, mas bom...eles se conheciam, se ajudavam. Acredito que eram brothers) de Alan Turing, achou genial a tese de Turing e a partir dali desenvolvou uma arquitetura que transformasse aquela máquina abstrata em uma máquina real. Nasce aí (1937 +-) a "arquitetura von Neumann" de computadores, que consiste de uma memória, uma unidade de controle, uma unidade aritmética e lógica, entrada e saída de dados. Utilizamos essa mesma arquitetura até hoje!
Bom, tanto von Neumann quanto Turing são considerados os pais da computação moderna por causa desses avanços conjuintos. Apesar da área da computação não receber o prêmio Nobel, existe um análogo a ciências da computação chamado de "Turing Award": https://en.wikipedia.org/wiki/Turing_Award
Tanto von Neumann quanto Turing criaram o caminho para inovações fantásticas, que vivemos até hoje. Pegando a lista do Turing Award acima, eu quero chamar a atenção para o vencedor do prêmio de 2020 (sim, 2 anos atrás): Alfred Aho e Jeffrey Ullman. Eles são os escritores do "livro do dragão" dos compiladores ( https://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886 ) mas também da teoria e fundamentos das implementações de linguagem de programação.
Indo direto ao ponto, vimos que o computador de Turing é uma máquina abstrata capaz de calcular qualquer função (na prática, nós temos limitações. Você já deve ter ouvido de problemas NP, NP-Complete, NP-Hard, etc). Uma linguagem Turing-complete é também chamada de uma linguagem universal - que segue as mesmas definições teóricas e matemáticas propostas por Turing, de ser capaz de computar qualquer coisa que qualquer outro método computacional consiga computador.
Em outras palavras, uma linguagem que NÃO é Turing-complete possui algumas limitações na lista de coisas que ela consegue computar. Eu não vou te mostrar o passo-a-passo de provar como sua linguagem de programação é Turing-complete (um tópico gigante, mas você pode usar o livro do dragão acima) mas, ao final de todo o procedimento, caso você seja bem sucedido, você possui em mãos uma linguagem que consegue representar qualquer outro método computacional: contas, aplicações web, aplicações embarcadas, computação na nuvem e toda essa infinitade.
JavaScript é uma linguagem Turing-Complete, por isso eu disse que você pode fazer tudo com ela. Você DEVE fazer tudo com ela? Aí já é outra pergunta :P
EXTRA: Existe um passo muito legal no mundo do desenvolvimentos de linguagens de programação que é o "bootstrap". Bom, se a linguagem criada é Turing-complete, quer dizer que ela consegue computar qualquer outra operação computacional. Entendemos isso (espero hahaha). Então...ela consegue computar ela mesmo! Bootstrap é uma técnica onde nós criamos o compilador da linguagem utilizando a própria linguagen, então ela acaba se auto compilando!
> If I want to learn more about ... operating system, where should I begin?
1) Skim through the materials on https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2009/ and see if anything seems unfamiliar. If so, then read/review that.
2) Read the papers on http://web.mit.edu/6.033/www/ up through february 27th
3) Work through https://pdos.csail.mit.edu/6.828/2018/schedule.html -- Its a really good intro to Operating Systems.
As far as an intro to compilers, I don't know. I've heard The Dragon Book recommended, but I've also seen it argued that there are better introductions. You could always work through the course materials on http://6.035.scripts.mit.edu/fa18/schedule.html, but I've not taken that class so I cannot really comment.
Lexers and parsers.
Yes, lexical analysis and parsing are the first stages of compiling programs - and if you're only interested in syntactical correctness, the further stages are unnecessary. Coursera has a course on compilers you might find interesting, and the Dragon Book is widely regarded as a classic reference on them (though I must admit that I haven't read it myself).
As for regular expressions that are mentioned in other comments - they aren't powerful enough to parse mathematical expressions or computer programs. You can read on formal language theory if you're interested in that; to put it simply, regular expressions are incapable of counting how many times some token appeared (i.e. they can't match stuff like braces and are thus incapable of parsing structures that can be nested arbitrarily deeply, like subexpressions in a mathematical equation).
Both books I've read. The latter sits on my bookshelf. It was a gift from my girlfriend. Please don't waste your time trying to implement a compiler. It's a PhD level endeavor that will take years of dedicated 60 hour work weeks.
Here are the same links linked from my Amazon affiliates account:
You are better off implementing a algebraic calculator using LR Parse. Start with Tom Torf's - Programmers Calculator - PCalc. It's written in C and pretty simple. You can fork it from my GitHub account if you have trouble finding Tom's source archive. Tom (may he rest in peace) also wrote several programming tutorials and contributed to comp.lang.c, alt.lang.c and the comp.lang.c FAQ.
For lexing and parsing, you should just pick up a compiler book. You could bang your head against it your whole life without figuring it out, and the Right Answer is not that hard if you have someone to show it to you. There are lots of good ones; the classic is the "dragon book" (http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886).
Beyond that, VMs are a big topic. They include all of compilers, and almost all of systems programming. The Smith and Nair book (http://www.amazon.com/Virtual-Machines-Versatile-Platforms-Architecture/dp/1558609105) is a great jumping off point. But so is playing around with a project that means something to you. It depends what you find more rewarding.